![]() |
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:
schreibe
Application.ProcessMessages
|
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.
|
Re: Trotz Einzelschritt aktualisieren
Bin mir nicht sichr aber gibt es nicht sowas wie ein Form.update?
|
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:
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...
Label1.Caption:= 'a caption';
Update; Label1.Caption:= 'another caption'; Update; 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:
"sauber" zu beenden, indem man den Ausdruck myResultSet.Last "überwacht" ;)
while not myResultSet.EOF do
begin SomeAction(myResultSet); //forgotten to call myResultSet.Next; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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