Announcement

Collapse
No announcement yet.

While-Schleife verhindert Schliessen eines Fensters

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • While-Schleife verhindert Schliessen eines Fensters

    Hallo,

    Ich habe ein Problem mit einer While-Schleife. Ich habe folgendes Testprogramm geschrieben, welches die Problematik verdeutlicht:

    const
    WM_TEST = WM_USER+1;

    ...

    // Schalter zum Aufrufen der Testfunktion
    procedure TMainform.Button1Click(Sender: TObject);
    begin
    PostMessage(Handle, WM_TEST, 0,0);
    MessageDlg('Ok',mtInformation, [mbOk], 0);
    end;

    // Testfunktion, wird über WM_TEST aufgerufen
    procedure TMainform.Execute(var Message: TMessage);
    begin
    while(True) do Application.processmessages;
    end;

    Die Testfunktion besteht aus einer Endlosschleife, die fortwährend die Funktion Application.processmessages aufruft, so das Windows-Nachrichten weiter verarbeitet werden können.
    Klickt man auf Button1, wird eine WM_TEST Botschaft abgesendet. Anschliessend öffnet sich eine Dialogbox mit dem Text "OK".
    Soweit ist nach alles klar. Aber wenn ich diese DlgBox schliessen möchte , reagiert sie nicht mehr. Warum?

    Thomas Wittek

  • #2
    Hi

    Aua. Das was Du da machst ist sehr "gefährlich". Wenn ein Delphi Dialog geöffnet wird, dann geschiet dies mit TForm.ShowModal. Intern macht Showmodal genau das gleiche wie Deine Loop. Somit bekommt die Message Loop in TForm.Showmodal die "Kontrolle" über alle Messages der Anwendung. Nun, Du setzt aber mit PostMessage wm_Test ab, was dazu führt das die aktive Messageloop in .ShowModal die Kontrolle an Deine Loop weitergibt. Deine Loop wiederum ist sehr sehr rudimentär und berücksichtigt KEINERLEI Sonderfälle. Der Fehler liegt also in Deiner Vorgehensweise. Ein ähnliches Resultat sollte auftreten wenn Du den Aufruf von MessageDlg() durch z.B. PopupMenu1.Popup() ersetzt.

    Gruß Hage

    Comment

    Working...
    X