Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Starthilfe für Graphik Zeichnen (https://www.delphipraxis.net/157919-starthilfe-fuer-graphik-zeichnen.html)

schwa226 29. Jan 2011 17:42

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!

Bummi 29. Jan 2011 17:47

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.

schwa226 29. Jan 2011 18:27

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!

schwa226 29. Jan 2011 19:16

AW: Starthilfe für Graphik Zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt hab ich gleich noch ein Problem mit OnResize!

Delphi-Quellcode:
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;
Wenn ich die Form nun veränder wandert die Zeichnung mit, aber die alten Linien bleiben bestehen.
Wie kann man die Löschen?
Beim OnResize zuerst ein FillRect mit Schwarz aufzurufen hat nicht geholfen.

Bummi 29. Jan 2011 19:24

AW: Starthilfe für Graphik Zeichnen
 
Du malst ja auch nur drüber, das alte wird nicht entfernt...
Also Bitmap leeren oder füllen ...

schwa226 29. Jan 2011 19:27

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:
  Image.Picture.Bitmap.Canvas.FillRect(
    Rect(
          0,
          0,
          Image.Picture.Bitmap.Width,
          Image.Picture.Bitmap.Height)
          );
Dann geht es und die alten Linien werden gelöscht!


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