Seite 1 von 1

While WindowEvent() funktioniert nicht bei Buttons?

Verfasst: 04.07.2014 10:31
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?

Re: While WindowEvent() funktioniert nicht bei Buttons?

Verfasst: 04.07.2014 10:50
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?

Re: While WindowEvent() funktioniert nicht bei Buttons?

Verfasst: 04.07.2014 10:52
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

Re: While WindowEvent() funktioniert nicht bei Buttons?

Verfasst: 04.07.2014 11:01
von NicTheQuick
Noch einfacher geht's jetzt ja mit 'BindEvent()' und 'BindGadgetEvent()'.

Re: While WindowEvent() funktioniert nicht bei Buttons?

Verfasst: 04.07.2014 13:27
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?

Re: While WindowEvent() funktioniert nicht bei Buttons?

Verfasst: 04.07.2014 13:34
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...

Re: While WindowEvent() funktioniert nicht bei Buttons?

Verfasst: 04.07.2014 13:59
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.