![]() |
Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen
Mein Programm macht ab und zu Berechnungen die etwa 3 Minuten dauern können.
Wenn man es dann in die Taskleiste minimiert, wird ein Form am Bildschirmrand angezeigt wo der aktuelle Status angezeigt wird. Wenn ich auf mein Programmsymbol in der Taskleiste klicke kommt mein Programm wieder nach oben und dann soll das Formular am Bildschirmrand weggehen. Kann ich irgendwie anders als mit ApplicationEvents OnRestore auf das wiederhochholen des Fensters reagieren? OnRestore klappt nicht weil mein Programm während der Berechnung in einer Procedur hängt. |
AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen
Ist denn die Prozedur in einen Thread bzw asynchronen Task ausgelagert?
|
AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen
Die Prozedur ist in einem Thread ausgelagert. Im Thread selber wird aber auf VCL-Elemente der Hauptform zugegriffen.
Hab mittlerweile alles getestet. Ob mit Thread oder ohne, kommt alles aufs gleiche raus > OnRestore wird nicht aufgerufen. Ich bräuchte eine Art Code die Checkt, ob FormX sichtbar ist. Hatte diesen Check in einen eigenen Thread ausgelagert hat aber auch nicht geklappt. |
AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen
Zitat:
|
AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen
Danke für deinen Post.
Ich habe den gesamten Code wieder aus dem Thread genommen. Er rennt jetzt wieder im Hauptthread der Anwendung. Grund ist, dass der Thread keine ABhilfe geschafft hat. Was ich im Prinzip brauche ist eine ALternative zu Application.OnRestore. Ein OnRestore (Klick auf mein Icon in der Taskleiste) was eben auch auslöst, wenn ich in einer Prozedur bin. |
AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen
Das Event würde auslösen, wenn du aus deinem Thread nicht auf die MainForm zugreifen würdest. Durch den Zugriff auf die MainForm aus dem Thread heraus ist es so, als würdest du gar keinen Thread verwenden. Somit wird die GUI blockiert und kann auch keine Events (oder nur verzögert) auslösen.
Was genau bezweckst du denn mit dem Zugriff auf deine MainForm? Nimmst du dir von dort die Daten oder willst du dort was aktualisieren? Wenn ja, dann löse Events aus dem Thread mit
Delphi-Quellcode:
aus um was zu aktualisieren. Die Daten die du im Thread benötigst um zu rechnen solltest du mit einer Klasseninstanz an deinen Thread übergeben, sodass der Zugriff auf deine MainForm wegfällt.
Synchronize()
|
AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen
Synchronise ist eine gute Idee, danke.
Viele Variablen kann ich leider nicht an die Klasse binden und dort ändern, da sie auch an anderen Stellen benötigt werden. Also grob gesagt: wenn ich Synchronize verwende ist alles halbwegs in Butter? Bleibt nur das Problem mit der blockierten GUI und dem nicht auslösenden OnRestore. Das bekomme ich wahrscheinlich gar nicht weg oder? |
AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen
Doch indem du den blockierenden Code in einen Thread auslagerst. Dann reagiert deine GUI auch wieder. Natürlich wird das wieder hinfällig, wenn du ständig aus dem Thread raus die GUI aktualisierst.
|
AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen
Hier ist eine schöne Zusammenfassung zur Thread-Synchronisation:
![]() |
AW: Beim anzeigen meines Programmes aus der Taskleiste Hauptform nicht anzeigen
Zitat:
Zitat:
Delphi-Quellcode:
voll und ganz ausreichend.
postmessage
Zitat:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 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