AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Starthilfe für Graphik Zeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

Starthilfe für Graphik Zeichnen

Ein Thema von schwa226 · begonnen am 29. Jan 2011 · letzter Beitrag vom 29. Jan 2011
Antwort Antwort
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#1

Starthilfe für Graphik Zeichnen

  Alt 29. Jan 2011, 18:42
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!
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Starthilfe für Graphik Zeichnen

  Alt 29. Jan 2011, 18:47
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#3

AW: Starthilfe für Graphik Zeichnen

  Alt 29. Jan 2011, 19:27
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!
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#4

AW: Starthilfe für Graphik Zeichnen

  Alt 29. Jan 2011, 20:16
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.
Miniaturansicht angehängter Grafiken
unbenannt.jpg  
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Starthilfe für Graphik Zeichnen

  Alt 29. Jan 2011, 20:24
Du malst ja auch nur drüber, das alte wird nicht entfernt...
Also Bitmap leeren oder füllen ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#6

AW: Starthilfe für Graphik Zeichnen

  Alt 29. Jan 2011, 20:27
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!
Delphi 2010, Update 4 & 5
  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 21:57 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