Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Trotz Einzelschritt aktualisieren (https://www.delphipraxis.net/12638-trotz-einzelschritt-aktualisieren.html)

Nalincah 1. Dez 2003 15:37


Trotz Einzelschritt aktualisieren
 
Wie kann ich im Einzelschritt das aktuelle Projekt aktualisieren? Also das nach jedem Einzelschritt die Form aktualisiert wird??? Bei mir macht der das nur nachdem der mit einer Prozedur fertig ist, oder wenn ich

Delphi-Quellcode:
Application.ProcessMessages
schreibe

Mario 1. Dez 2003 16:00

Re: Trotz Einzelschritt aktualisieren
 
Gar nicht. Um Dein Form neu zu zeichnen, müsste ja dessen Code ausgeführt werden. Aber genau das willst Du ja nicht, Du bist ja im Einzelschrittmodus.

Flogo 1. Dez 2003 16:04

Re: Trotz Einzelschritt aktualisieren
 
Bin mir nicht sichr aber gibt es nicht sowas wie ein Form.update?

choose 2. Dez 2003 13:01

Re: Trotz Einzelschritt aktualisieren
 
Hallo Flogo,

mit TWinControl.Update kannst Du tatsächlich den Inhalt eines Controls neuzeichnen lassen, ohne die anstehenden Nachrichten verarbeiten zu lassen (TApplication.ProcessMessages).

Du konntest nun hinter jeweils einer Zeile im Code einen entsprechenden Aufruf machen
Delphi-Quellcode:
Label1.Caption:= 'a caption';
Update;
Label1.Caption:= 'another caption';
Update;
Nach dem "Überschreiten" eines Aufrufs von Update würde dann auch im Einzelschrittmodus das Fenster neugezeichnet werden. Dieses Vorgehen hat den Haken, dass Du Deinen tatsächlichen Code veränderst und diese Änderung nach dem Debuggen rückgängig machen solltest...

Stattdessen kannst Du einen Debugger-Trick anwenden: Mit <Strg>+<F5> kannst Du Ausdrücke überwachen lassen, also zB Label1.Caption. Dieser Ausdruck wird dann nach jeder Programmzeile ausgewertet und angezeigt. Über einfache Variablen/Referenzen und Properties hinaus hat man jedoch auch die Möglichkeit, Funktionsergebnisse abzufragen, zB Abs(3-StrToInt(Label1.Caption)). Hierzu muss man lediglich den Haken "Funktionsaufrufe gestatten" zu dem überwachten Ausdruck setzen.
Der Trick besteht nun darin, den Rückgabewert von Self.Update auswerten zu lassen. Zwar wird als Ergebnis angezeigt: "(kein Wert)", tatsächlich wird die Methode aber nach jedem Programmschritt aufgerufen, was den besagten Nebeneffekt hat, dass das Fenster (Self) neugezeichnet wird.

Diese Technik kann auch prima verwendet werden, wenn man sich in Endlosschleifen der Form
Delphi-Quellcode:
while not myResultSet.EOF do
begin
  SomeAction(myResultSet);
  //forgotten to call myResultSet.Next;
end;
"sauber" zu beenden, indem man den Ausdruck myResultSet.Last "überwacht" ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz