![]() |
Starthilfe für Graphik Zeichnen
Hallo,
ich brauche etwas Hilfe, da es das erste mal ist das ich sowas machen will! Ich habe einen Thread, der Statisiken führt. Ich schicke nun von meiner Hauptform per PostThreadMessage den Befehl "Zeichne" an den Thread. Nun muss ich natürlich auch noch eine Form zuerst anzeigen, damit der Thread darauf zeichnen kann. Mein erster Versuch war: Auf einen ButtonClick habe ich eine Form geöffnet. Diese Form hat als einziges ein Indy Tbitmap. Dann habe ich die Message zum Zeichnen an den Thread geschickt. Dieser hat auch manchmal etwas per Canvas.Textout oder MoveTo und LineTo etwas gezeichnet, aber nicht immer. Zumindest war es nicht immer sichtbar. Das schien mir wie ein Sync Problem. Denn wenn ich langsam durchgesteppt bin ging es meistens. Wenn ich es durchlaufen ließ fast nie. Also irgendwas mit dem Anzeigen der form und Refresh/Update des Bitmaps. Soll die Form von Thread selber erstellt werden, oder soll der Thread der Form per Postmessage senden was zu Zeichnen ist. Was ist hier die besser Lösung um etwas aus einem Thread zu zeichnen? Danke! |
AW: Starthilfe für Graphik Zeichnen
Aus einem Thread niemals auf VCL-Komponenten ohne Synchronize zugreifen, Gegenvorschlag, hol Dir die zu malenden Daten über eine mit einer CS gekapselte Property aus dem Thread und male im Hauptthread.
|
AW: Starthilfe für Graphik Zeichnen
Danke für den Tipp!
Ich hole mir nun die Struktur über ein Property des Threads und zeichne sie dann in der Form selber. Nun ist alles immer sichtbar! Danke! |
AW: Starthilfe für Graphik Zeichnen
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt hab ich gleich noch ein Problem mit OnResize!
Delphi-Quellcode:
Wenn ich die Form nun veränder wandert die Zeichnung mit, aber die alten Linien bleiben bestehen.
procedure TfrmNET.OnCreate(Sender: TObject);
begin Bitmap := TBitmap.Create; Bitmap.Width := Image.ClientWidth; Bitmap.Height := Image.ClientHeight; Bitmap.Canvas.Brush.Color := clBlack; Bitmap.Canvas.FillRect(Rect(0,0,Bitmap.Width,Bitmap.Height)); Image.Picture.Graphic := Bitmap; end; procedure TfrmNET.OnResize(Sender: TObject); begin Image.Picture.Bitmap.Width := Image.ClientWidth; Image.Picture.Bitmap.Height := Image.ClientHeight; DrawConnection(@myNET, Point(Image.Width div 2, 0)); end; Wie kann man die Löschen? Beim OnResize zuerst ein FillRect mit Schwarz aufzurufen hat nicht geholfen. |
AW: Starthilfe für Graphik Zeichnen
Du malst ja auch nur drüber, das alte wird nicht entfernt...
Also Bitmap leeren oder füllen ... |
AW: Starthilfe für Graphik Zeichnen
Ich doof...
Ich habe das verwendet: Bitmap.Canvas.FillRect(Rect(0,0,Bitmap.Width,Bitma p.Height)); und das ging im OnResize nicht. Es muss sein:
Delphi-Quellcode:
Dann geht es und die alten Linien werden gelöscht!
Image.Picture.Bitmap.Canvas.FillRect(
Rect( 0, 0, Image.Picture.Bitmap.Width, Image.Picture.Bitmap.Height) ); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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