![]() |
Delphi-Version: XE
eigenartiges Verhalten von tlabel u. a. in for - to Schleifen
Hallo,
habe bisher immer 'mal beim Testen tlabels u.a. genutzt, um Variablenänderungenzu beobachten (bisher in Turbodelphi), z.B.
Delphi-Quellcode:
Jetzt beobachte ich, daß tform.caption und Button2.Caption die i's alle darstellen, bei den anderen wird nur i= 10 dargestellt - also das Ende der Schleife. Zwischendurch erfolgt keine Neudarstellung.
procedure TForm2.Button1Click(Sender: TObject);
var I: Integer; begin for I := 0 to 10 do begin caption:=inttostr(i); Button2.Caption:=inttostr(i); edit1.text:=inttostr(i); label1.Caption:=inttostr(i); RichEdit1.Lines.Add(inttostr(i)); sleep(250); end; end; Manchmal -insbesonder wenn ich tbutton benutze, kommt kurzfritig - "Das programm antwortet nicht" - mag aber an sleep liegen! Weiß jemand, woran das liegt - irgendeine Delphi- oder Windows-Optimierung (Windows 7 64 bit) ? Muß man eine Neudarstellung erzwingen? Mit gespannten Grüßen Uwe |
AW: eigenartiges Verhalten von tlabel u. a. in for - to Schleifen
Erzwinge ein Neuzeichnen bzw. gib dem Formular die Chance
Delphi-Quellcode:
Application.ProcessMessages;
|
AW: eigenartiges Verhalten von tlabel u. a. in for - to Schleifen
in die Schleife vor Sleep:
Delphi-Quellcode:
// Edit: Moderator war schneller
Application.ProcessMessages;
|
AW: eigenartiges Verhalten von tlabel u. a. in for - to Schleifen
Das ist es,
mir war dieser Befehl entfallen! danke , Bjoerk und Markus Kinzler! Warum geht das ohne Application.ProcessMessages bei einigen "Darstellern", bei anderen nicht? Es ist mir auch schon passiert aus einem trichedit.onchange - jeder tastenclick solte im Tlabel etwas darstellen - da wurde nur das erste Klicken bearbeitet und dann kein weiteres! MfG Uwe |
AW: eigenartiges Verhalten von tlabel u. a. in for - to Schleifen
Es wird keine Rechenzeit an den "zeichenen" Prozess abgegeben
|
AW: eigenartiges Verhalten von tlabel u. a. in for - to Schleifen
Zitat:
|
AW: eigenartiges Verhalten von tlabel u. a. in for - to Schleifen
Danke Markus,
verstehe ich - dann muß den Knecht eben zwingen! Klappt aber auch nicht immer - benutzt man in einem etwas umfangreicheren Programm obiges Konstrukt, erweist sich tlabel als am stursten - will sich nicht neu darstellen, auch wenn man sofort nach der string-Zuordnung zu caption ein application.processmessages auslöst! Hier beim Testen funktionierte es (siehe mein Delphi-Beispiel) in tform.caption und tbutton.caption (da nicht immer) ohne application.processmessages! - Wie dieses Messaging funktioniert, weiß ich auch nicht! Danke für's mitdenken Uwe |
AW: eigenartiges Verhalten von tlabel u. a. in for - to Schleifen
Das Fenter ( Ein Control ist unter Windows ein fenster) bekommt eine Nachricht gesendet, dass es sich neu Zeichnen soll.
Delphi-Quellcode:
sogt dafür, dass alle untergeordneten "Fenster" ihre "Messages" abarbeiten.
Application.ProcessMessages;
|
AW: eigenartiges Verhalten von tlabel u. a. in for - to Schleifen
Einige Komponenten zeichnen sich bei jeder Kleinigkeit neu, was schonmal ganz schön Zeit fressen kann, wenn man Mehreres ändert.
TLabel sendet sich nur eine Nachricht "zeichne dich mal neu", welcher immer nur einmal in der Nachrichtenschlange landet. Somit wird das Label quasi nur neu gezeichnet, wenn sich Form das nächtes Mal reagiert und alle bisherigen Nachrichten verarbeitet hat. PS: Das TLabel kennt noch die Methoden Refresh und Repaint, um sich sofort neu zu zeichnen. |
AW: eigenartiges Verhalten von tlabel u. a. in for - to Schleifen
Zitat:
Hallo, in scheinbar rechenaufwändigen Programmen läßt sich als einziges tlabel von den genannten nicht einmal durch direktes Aufrufen von refresh oder repaint zu einer Neudarstellung vor Ende der Schleife zwingen! Gruß Uwe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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