AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

per Thread auf Form zeichnen?

Ein Thema von Gruber_Hans_12345 · begonnen am 14. Apr 2009 · letzter Beitrag vom 14. Apr 2009
Antwort Antwort
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#1

per Thread auf Form zeichnen?

  Alt 14. Apr 2009, 16:06
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?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: per Thread auf Form zeichnen?

  Alt 14. Apr 2009, 16:08
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: per Thread auf Form zeichnen?

  Alt 14. Apr 2009, 16:11
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
Klaus
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#4

Re: per Thread auf Form zeichnen?

  Alt 14. Apr 2009, 16:34
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
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

Re: per Thread auf Form zeichnen?

  Alt 14. Apr 2009, 17:01
Zitat von Bernhard Geyer:
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
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: per Thread auf Form zeichnen?

  Alt 14. Apr 2009, 17:37
Oder die Benachrichtigung das er noch läuft in einen Thread packen, und vor der Routine aufrufen und am ende dann wieder beenden!
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#7

Re: per Thread auf Form zeichnen?

  Alt 14. Apr 2009, 19:00
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:38 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