While WindowEvent() funktioniert nicht bei Buttons?

Für allgemeine Fragen zur Programmierung mit PureBasic.
hyperG
Beiträge: 23
Registriert: 28.06.2014 10:43

While WindowEvent() funktioniert nicht bei Buttons?

Beitrag von hyperG »

Habe eine große und lang dauernde Schleife für zig Dateien:

Code: Alles auswählen

While NextDirectoryEntry(lDir.i)
 ...
 While WindowEvent() : Wend ;DoEvents()
Wend
Die WindowEvent-Schleife lässt zwar Botschaften für Editierfelder durch (so kann die ganze Proc jederzeit beendet werden),
ABER wenn ich die Proc per Button stoppen möchte, reagiert dieser nicht?

Erst nach Ablsuf der Proc reagiert er.

Benötigt der Button mehr Botschaften als ein Editierfeld?
Wie kann man die Button-Funktionalität noch sicherstellen?
Mehrere While WindowEvent() : Wend Schleifen?
oder Extra Thread?
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: While WindowEvent() funktioniert nicht bei Buttons?

Beitrag von Micha122 »

Wenn du die Eventschleife verlässt, kann der Button doch gar nicht mehr abgefragt werden.
Die lang dauernde Schleife würde ich unbedingt im eigenen Thread starten, dann wird die Eventschleife auch weiterhin durchlaufen.
Eigentlich müsste oben im Fenster auch "keine Rückmeldung" stehen?
Barcodes for PureBasic - http://micha122.bplaced.net/
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: While WindowEvent() funktioniert nicht bei Buttons?

Beitrag von Kiffi »

hyperG hat geschrieben: oder Extra Thread?
empfehlenswert. Ja.

Mit Deinem 'DoEvents' klaust Du der Haupt-Eventschleife das Klick-Ereignis des Buttons.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: While WindowEvent() funktioniert nicht bei Buttons?

Beitrag von NicTheQuick »

Noch einfacher geht's jetzt ja mit 'BindEvent()' und 'BindGadgetEvent()'.
hyperG
Beiträge: 23
Registriert: 28.06.2014 10:43

Re: While WindowEvent() funktioniert nicht bei Buttons?

Beitrag von hyperG »

Danke, BindGadgetEvent() scheint direkt mit SendMessage statt dem verzögerten PostMessage (Botschaftenwarteschlange) zu arbeiten.
:allright:

Da ich erst Version 5.10 hatte, konnte ich nichts in der Hilfe finden und der Code zeigte auch auf "unbekannt". Ab Version 5.20 kam das erst...

Kann man die neue Version "drüber installieren"? Oder besser erst alte deinstall?
hyperG
Beiträge: 23
Registriert: 28.06.2014 10:43

Re: While WindowEvent() funktioniert nicht bei Buttons?

Beitrag von hyperG »

Micha122 hat geschrieben: ...
Eigentlich müsste oben im Fenster auch "keine Rückmeldung" stehen?
Nein! Gerade weil ich per

Code: Alles auswählen

While WindowEvent() : Wend ;DoEvents()
Botschaften nebenbei zulasse (also die Botschaftenwarteschleife von Windows abarbeiten lasse)
kommt kein "keine Rückmeldung".

Was ich nur nicht verstanden habe war, dass die Botschaften für den Button so viel schlechter als die des Edit-Fensters verarbeitet werden.

Vermutlich verbraucht die Animation "Button tief hineingedrückt" viel mehr Botschaften...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: While WindowEvent() funktioniert nicht bei Buttons?

Beitrag von NicTheQuick »

hyperG hat geschrieben:Kann man die neue Version "drüber installieren"? Oder besser erst alte deinstall?
Mein "programme"-Verzeichnis auf Linux sieht mittlerweile so aus:

Code: Alles auswählen

purebasic
purebasic_4.41
purebasic_4.50
purebasic_4.61
purebasic_4.6rc1
purebasic_5.00
purebasic_5.10
purebasic_5.11
purebasic_5.21_LTS
purebasic_5.22
Wenn es ein neues Purebasic gibt, benenne ich den aktuellen "purebasic"-Ordner um, indem ich die Version hinten dran hänge und dann kopiere ich den neuen in den "programme"-Ordner. So muss ich auch meine Verknüpfung im Launcher nicht ändern. Und damit die Abwärtskompatibilität zu älteren Quellcodes gewahrt bleibt, füge ich dann in den Einstellungen den zweitältesten Compiler (also das Purebasic in dem umbenannten Ordner) zu den verfügbaren Compilern hinzu.

Um auf deine Frage konkret zu antworten. "Drüberinstallieren" wird nicht empfohlen. Entweder den alten deinstallieren oder verschieben wie ich das mache. Und dann erst den neuen installieren.
Antworten