![]() |
TThread Controls aktualisieren lassen
Hi,
ich möchte mittel TThread z.B ein VST auf einem Frame verändern. Allerdings sagt mir der Thread immer er erkennt das VST nicht, trotz einbindens der Unit. Wenn ich es alleringds mit einen Form probiere klappt es. Wieso nicht mit einem Frame? Beispiel im Thread:
Delphi-Quellcode:
uses Form1, Frame1
Delphi-Quellcode:
Form1.Label1 := 'a'; <<< ist in Ordnung
Frame1.Label1 := 'a'; <<< erkennt er nicht |
AW: TThread Controls aktualisieren lassen
Delphi-Quellcode:
Der Grund ist recht einfach. Es kann ja sein das du mehrere Formulare hast und wenn du einfach Frame1.Irgendwas schreibst weiß weder der Compiler noch sonst wer wo sich der Frame befindet (er könnte ja auch auf Form2 liegen).
Frame1.Label1 := 'a'; <<< erkennt er nicht
Daher muss es dann natürlich heißen
Delphi-Quellcode:
Das funktioniert natürlich nur wenn der Frame auch auf Form1 liegt.
Form1.Frame1.Label1 := 'a';
ALLERDINGS solltest du das niemals direkt aus dem Thread heraus machen sondern nur innerhalb einer Methode die du vorher mit Syncronize aufgerufen hast. Ansonsten passiert es ganz schnell das an irgendwelchen unerwarteten Stellen plötzlich Fehler auftreten. Der Grund dafür ist das die VCL größtenteils nicht Threadsicher ist. Das heißt die Grafikkomponenten auf deinem Formular laufen in einem Thread und wenn du von einem anderen Thread aus direkt darauf zugreifst entstehen "wunderschöne" Fehler. Mit Syncronize innerhalb des Threads erreichst du das der Thread mit dem Formular-Thread (also dem Hauptthread) syncronisiert wird bzw. deine Befehle im Kontext des Hauptthreads ausgeführt werden. |
AW: TThread Controls aktualisieren lassen
Alle Windows-Controls (also alles was ein Windows-Handle hat) hat eine Thread-Affinität. Es darf nur im erzeugenden Thread angesprochen werden.
|
AW: TThread Controls aktualisieren lassen
Heisst es nicht auch zusätzlich noch
Zitat:
|
AW: TThread Controls aktualisieren lassen
Da hat der schwarze Delphin recht :-D Darauf hab ich gar nicht geachtet. Aber ich denke der Fragesteller hat es bereits richtig da sonst auch die erste Variante bei ihm nicht funktionieren würde.
|
AW: TThread Controls aktualisieren lassen
Ja das war nur ein kleiner schnelligkeits Tippfehler :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 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