![]() |
Programm anhalten und auf Taste/Button warten
Hallo,
ich schreibe gerade an ein "DebugWindow", das bestimmte Meldungen, die ich im Hauptprogramm einfüge in einem separaten Fenster anzeigt. z.B.
Delphi-Quellcode:
Nun möchte ich aber eine Art "Einzelschrittmodus" implementieren, d.h. erst nachdem der Weiter-Knopf gedrückt wurde soll das Hauptprogramm weitermachen.
DebugM.ShowDebugMsg := 'Test ' + inttostr(i);
Delphi-Quellcode:
Das hat den Nachteil, dass die Prozessorauslastung auf 100% geht und nicht sehr elegant ist.
PROCEDURE TfDebugMemo.WaitForButton;
BEGIN REPEAT Application.ProcessMessages; UNTIL (FNext); END; // ---------------------------- PROCEDURE TfDebugMemo.SpeedButton1Click(Sender: TObject); BEGIN FNext := True; END; Hat jemand einen bessere Lösung für mich? :?: Vielleicht doch irgend etwas mit Modal, das gefällt mir sehr gut :mrgreen: |
Vielleicht ein Timer der alle X MSec überprüft ob FNext = True ist, kannst ja in das OnTimer schreiben:
Delphi-Quellcode:
versuchs mal so
procedure TForm1.Timer1Timer(Sender: TObject);
begin If FNext then begin // was auch immer, wenn FNEXT = True ist end else If not FNext then begin // wenn FNEXT = False ist... end; end; |
@mirage228,
Leider funktioniert Deine Idee nicht, ich habe mich vielleicht auch unpräzise ausgedrückt: Ich habe ein Hauptformular, dort rufe ich bei Bedarf das DebugWindow-Formular auf, dieses soll (ja nach Einstellung) das Hauptprogramm solange anhalten, bis im DebugWindow eine Taste gdrückt wurde. Bei Deiner Lösung läuft das Hauptprogramm während des TimerEvents nebenbei weiter... |
Zeig das Debug-Fenster doch modal an, dann wartet der hauptthread so lange bis dein Fenster zurückkehrt.
|
Hallo Luckie,
Zitat:
|
:shock: Uuups. :oops:
|
Hallo,
nachdem der Osterhase so brav :mrgreen: war, habe ich mich noch einmal hingesetzt und eine Lösung für mein Problem gefunden. Folgender Code "verhindert" das Schließen (besser: öffnet es noch einmal) eines modalen Fensters nach dem es geschlossen (sic!) wurde.
Delphi-Quellcode:
Das Ganze funktioniert, aber nach dem Schließen "flackert" das Fenster kurz,
TYPE
TForm2 = CLASS(TForm) ... PRIVATE { Private-Deklarationen } PUBLIC FUNCTION ShowModal: Integer; OVERRIDE; { Public-Deklarationen } END; FUNCTION TForm2.ShowModal: Integer; BEGIN // Auf alle Fälle verstecken, sonst Exception bei ShowModal Self.Hide; Self.Caption := 'Debug ON'; INHERITED ShowModal; Result := ModalResult; Self.Show; Self.Caption := 'Debug OFF'; END; da es sich wieder neu aufbauen muß, das ist wenig elegant. Daher untersuchte ich die Methode ShowModal etwas genauer, und starte einen neuen Thread ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz