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 DrawCell im eigenen Thread? (https://www.delphipraxis.net/119502-drawcell-im-eigenen-thread.html)

BeBored 27. Aug 2008 16:53


DrawCell im eigenen Thread?
 
Hallo Leute,

ich bastel gerade ein Gleisbild und nutze dazu ein DrawGrid. Aus einer Datenbank lade ich alle Elemente in ein Array das ich dann auf deren Art prüfe (z.B. Gerade, WeicheObenLink usw...).

Wenn ich nun ein Element hinzufüge, wird das in die Datenbank gespeichert und das Array neu gefüllt... aber das Zeichnen des DrawGrid belegt die gesammte Anwendung und mein Rechner ist ziemlich fix... was passiert dann auf einer lahmen Kröte?

Nun würde ich gerne das DrawCell in einen Thread packen, damit die Anwendung benutzbar bleibt aber ein
Delphi-Quellcode:
// GleisMalen ist eine Prozedur mit If Abfragen nach der Art und dem jeweiligen Zeichnen des Elements
ThreadMalen.Synchronize(ThreadMalen.GleisMalen);
in der DrawCell Methode bringt leider nichts.. aber was Threads angeht bin ich absoluter Neuling.
Ist es überhaubt möglich das ganze in einen eigenen Thread zu packen oder bin ich hier sogar auf einem völlig falschem weg?

Apollonius 27. Aug 2008 16:59

Re: DrawCell im eigenen Thread?
 
Du musst immer in dem Thread zeichnen, dem das Fenster gehört. Eine Möglichkeit, trotzdem mehrere Threads zu benutzen, besteht darin, in einem Thread auf ein Bitmap zu zeichnen und dieses im Besitzerthread im DrawCell mit BitBlt zu kopieren.

BeBored 27. Aug 2008 17:02

Re: DrawCell im eigenen Thread?
 
Ich zeichne direkt in die Zelle mit MoveTo und LineTo, da fällt ein Bitmap weg :?

Apollonius 27. Aug 2008 17:03

Re: DrawCell im eigenen Thread?
 
Du kannst aber die Zeichenarbeiten im Voraus auf ein Bitmap ausführen.

BeBored 27. Aug 2008 17:07

Re: DrawCell im eigenen Thread?
 
Das klingt doch gut... ich werde das mal versuchen, danke dir :stupid:

Pfoto 27. Aug 2008 17:11

Re: DrawCell im eigenen Thread?
 
wenn du ein vorgefertigtes JPEG / PNG oder was auch immer
laden würdest, bräuchtest du noch nicht mal einen Thread,
du müsstest nur 1x alle Gleistypen generieren und speichern.

Gruß
Jürgen

BeBored 27. Aug 2008 19:05

Re: DrawCell im eigenen Thread?
 
Ich habe mir jetzt ein Array mit TBitmaps erstellt, in dem ich die einzelnen Arten drinnen habe.
Jetzt versuche ich innerhalb meiner Klasse die größe der Bitmaps zu setzen.. aber immer gibt er eine Exception aus.
Mache ich da irgendwas falsch? Die Bitmaps müßen doch erst eine definiert Größe haben denke ich.
Liegt es vielleicht daran das ich das innerhalb einer Klasse mache? Unter private habe ich das Array definiert mit
Delphi-Quellcode:
MyBitmaps: array of TBitmap;
und im Constructor der Klasse will ich die größe der Bitmaps setzen mit
Delphi-Quellcode:
SetLength(MyBitmaps, 20);
for I := Low(MyBitmaps) to High(MyBitmaps) do
  MyBitmaps[i].SetSize(20,10);
aber irgendwie will der nicht so wie ich :wall:

Apollonius 27. Aug 2008 19:15

Re: DrawCell im eigenen Thread?
 
Du musst die Bitmaps noch erzeugen:
Delphi-Quellcode:
MyBitmaps[i] := TBitmap.Create;

BeBored 28. Aug 2008 12:13

Re: DrawCell im eigenen Thread?
 
Genau das wars, ich danke dir :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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