Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 300
Erhaltene Danke: 28

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Mo 22.05.17 21:46 
Hallo Experten,

ich möchte mit einem "Start"-Knopf eine laufende Anzeige beginnen und die dann mit einem "Abort"-Knopf wieder anhalten. In der Delphi-Hilfe steht
"Mit der Methode ProcessMessages können Sie die Ausführung einer Anwendung unterbrechen, sodass die Botschaftswarteschlange verarbeitet werden kann."
Aber welche Botschaften (= Messages?) sind das? Im folgenden Code führt ein Drücken des "Abort"-Knopfes jedenfalls nicht dazu, dass BAbortClick ausgeführt wird.

Welche Botschaften werden ausgeführt und was passiert mit den anderen?

(Mit einer Auslagerung der REPEAT...UNTIL-Schleife in einen eigenen Thread ist das Problem behoben.)

Kennt jemand einen gute Quelle, wo ich mal was dazu lesen könnte?

Viele Grüße
GuaAck

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
  TForm1 = CLASS(TForm)
    BStarte: TButton;
    BAbort: TButton;
    PROCEDURE BStarteClick(Sender: TObject);
    PROCEDURE BAbortClick(Sender: TObject);
  PUBLIC
    abort: Boolean;
  END;

PROCEDURE TForm1.BStarteClick(Sender: TObject);
BEGIN
  abort := false;
  REPEAT
    ....
    Application.ProcessMessages;
  UNTIL abort;
END;

PROCEDURE TForm1.BAbortClick(Sender: TObject);
BEGIN
  abort := true;
END;



Moderiert von user profile iconNarses: Topic aus Windows API verschoben am Mo 22.05.2017 um 22:24
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10049
Erhaltene Danke: 1185

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.1
BeitragVerfasst: Mo 22.05.17 22:31 
Moin!

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
"Mit der Methode ProcessMessages können Sie die Ausführung einer Anwendung unterbrechen, sodass die Botschaftswarteschlange verarbeitet werden kann."
Aber welche Botschaften (= Messages?) sind das?
Alle Nachrichten (=Messages), die in der MessageLoop des Delphi-Hauptprogrammes (=der VCL-Thread) landen, also auch z.B. die Button-Klicks. :nixweiss:

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
Kennt jemand einen gute Quelle, wo ich mal was dazu lesen könnte?
MSDN ist dein Freund. ;)

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
Im folgenden Code führt ein Drücken des "Abort"-Knopfes jedenfalls nicht dazu, dass BAbortClick ausgeführt wird.
Der Code ist ja nicht vollständig, also kann man schlecht sagen, dass er nicht zum gewünschten Ergebnis führt. Lass mal jegliche anderen Befehle aus der Schleife weg, dann wirst du sehen, dass es funktioniert. :idea: ;)

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
Welche Botschaften werden ausgeführt
Alle, gnadenlos. Das geht sogar soweit, dass ggfs. auch der Button zum Starten erneut ausgeführt wird. :hair:

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
und was passiert mit den anderen?
Da gibt´s keine Selektion, simple Queue.

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
(Mit einer Auslagerung der REPEAT...UNTIL-Schleife in einen eigenen Thread ist das Problem behoben.)
Das hätte ich spätestens jetzt auch empfohlen, denn diese unselige Funktion ist leider ganz weit weg von der sog. "ereignisorientierten Programmierung". :?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.

Für diesen Beitrag haben gedankt: GuaAck
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 300
Erhaltene Danke: 28

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Mo 22.05.17 22:50 
Danke Narses,

super-umfassend, alles was ich wissen wollte!!!

Gruß
GuaAck