Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi per Thread auf Form zeichnen? (https://www.delphipraxis.net/132524-per-thread-auf-form-zeichnen.html)

Gruber_Hans_12345 14. Apr 2009 16:06


per Thread auf Form zeichnen?
 
Ich möchte gerne in einem Thread auf mein Form zeichnen ... Hintergrund ist :

In einer Funktion, die DAten aus der DB lädt, möchte ich gerne in der Statusleiste ein Image anzeigen, und dieses Image sollte sich zB ein kleine Sanduhr sein, die sich dreht.
Ich kann nicht oder nur so umständlich, das es NICHT geht, die Ladefunktion in einen Thread auslagern (da dies bei sehr sehr vielen verschiedenen Funktionen passieren sollte), daher dachte ich mir irgendwie das Zeichnen des Images auszulagern ... aber wie am besten?

Bernhard Geyer 14. Apr 2009 16:08

Re: per Thread auf Form zeichnen?
 
Zitat:

Zitat von Gruber_Hans_12345
Ich möchte gerne in einem Thread auf mein Form zeichnen

Vergiss es. Geht nicht! Das zeichnen muß im Hauptthread der Anwendung erfolgen!
Begründung: GDI-Handles haben eine Thread-Affinität und sind nur im erzeugten Thread gültig. und da auf jedenfall die globale Variable Application im Hauptthread erzeugt wurde gibt es immer problem in einen anderen Thread was mit GUI-Controls zu machen.

Klaus01 14. Apr 2009 16:11

Re: per Thread auf Form zeichnen?
 
Hallo Hans,

ich denke, dass es nicht viel Sinn macht die Zeichenroutine als Thread auszulagen.
Den diese müßte Sowieso synchronisiert auf die Form zeichnen.

Kannst Du nicht einen Timer triggern.
Beim Starten des Ladevorgangs Timer aktivieren.
Timer dreht jede Sekunde die Sanduhr.
Ist der Ladevorgang beendet Timer deaktivieren.

Dabei müßte der Ladevorgang aber noch genügend Systemresourcen (Nachrichtenschleife)
für den Timer übrig lassen (Application.processMessages).

Grüße
Klaus

Gruber_Hans_12345 14. Apr 2009 16:34

Re: per Thread auf Form zeichnen?
 
hmmmm, nein, da können keinen application.processmessages rein, da die ladefunktionen teils nicht von mir aufgerufen werden (THQuery.open, TADO ... )
verschiedenste sachen eben.

eventuell kann ich ein zweites "Fenster" mit genau der größe des images, das gezeichnet werden soll "drüber" legen, und auf dieses dann die Images zeichnen lassen?

Ich möchte nur, das der USer sieht, ah da tut sich noch etwas, das Programm ist noch nicht danz tot ;)

[edit]Ähnlich dem Progressbar, mit Marquee funktion (wenn das so heißt), das gibt ja auch noch "Ich lebe" Infos, auch wenn sich der Status einstweilen noch nicht geändert hat - nur, das bei mir die Hauptanwendung noch "beschäftigt" ist

franktron 14. Apr 2009 17:01

Re: per Thread auf Form zeichnen?
 
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von Gruber_Hans_12345
Ich möchte gerne in einem Thread auf mein Form zeichnen

Vergiss es. Geht nicht! Das zeichnen muß im Hauptthread der Anwendung erfolgen!n.

Das stimm nicht ganz mann kann ine einem Temporären Bild ( z.b. TBitmap) in einem Thread Zeichen und dann über Callback Routine das Bild an den MainThread übergeben

lbccaleb 14. Apr 2009 17:37

Re: per Thread auf Form zeichnen?
 
Oder die Benachrichtigung das er noch läuft in einen Thread packen, und vor der Routine aufrufen und am ende dann wieder beenden!

Reinhard Kern 14. Apr 2009 19:00

Re: per Thread auf Form zeichnen?
 
Zitat:

Zitat von Gruber_Hans_12345
Ich möchte gerne in einem Thread auf mein Form zeichnen ... Hintergrund ist :

In einer Funktion, die DAten aus der DB lädt, möchte ich gerne in der Statusleiste ein Image anzeigen, und dieses Image sollte sich zB ein kleine Sanduhr sein, die sich dreht.
...

Hallo,

du kannst auch eine userspezifische Message definieren und damit aus dem Thread mit Postmessage eine Information über den Fortschritt an deine Hauptform senden, der Thread braucht dazu nur das Windows-Handle der Form.

Gruss Reinhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz