Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Trotz Einzelschritt aktualisieren

  Alt 2. Dez 2003, 14:01
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"
gruß, choose
  Mit Zitat antworten Zitat