Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Löschen einer Paintbox verhindern (https://www.delphipraxis.net/99755-loeschen-einer-paintbox-verhindern.html)

little_budda 17. Sep 2007 12:50


Löschen einer Paintbox verhindern
 
Hallo,

ich stelle Phasenverläufe und Drehfelder grafisch dar.
Dazu zeichne ich meine Daten auf den Canvas zweier Paintboxen.
Klappt soweit auch gut.

Wenn ich meine Anwendung vom primären Monitor auf meinen zweiten Monitor verschiebe
werden die erzeugten Grafiken gelöscht.

Kann ich eine Paintbox "einfrieren" nachdem ich die Grafik erzeugt habe?

Für eine Idee wär ich dankbar.

Gruß Holger.

:gruebel:

Matze 17. Sep 2007 12:57

Re: Löschen einer Paintbox verhindern
 
Hallo,

du könntest im OnPaint-Ereignis deine Zeichenoperationen durchführen.

Luckie 17. Sep 2007 12:59

Re: Löschen einer Paintbox verhindern
 
Effektiver ist es auf ein Bitmap im Speicher zu zeichnen und es bei Bedarf auf den Canvas der Paintbox zu kopieren.

little_budda 17. Sep 2007 13:00

Re: Löschen einer Paintbox verhindern
 
Ich nutze den Canvas weil ich die erzeugten Grafiken parralel auch als Bitmap (Datei) ablege.

shmia 17. Sep 2007 13:01

Re: Löschen einer Paintbox verhindern
 
Zitat:

Zitat von Matze
du könntest im OnPaint-Ereignis deine Zeichenoperationen durchführen.

Du musst im OnPaint-Ereignis deine Zeichenoperationen durchführen.
Das Zeichnen auf den Canvas einer Paintbox ausserhalb des OnPaint-Ereignis wäre ein Fehler.
Falls das Zeichen viel Zeit kostet, ist die Paintbox nicht das richtige Control.
Dann sollte man ein TImage verwenden.

little_budda 17. Sep 2007 13:05

Re: Löschen einer Paintbox verhindern
 
Der umgekehrte Weg?
Erst das Bitmap erzeugen und danach die Paintbox füllen?
Ist das nicht dasselbe wie direkt in die Paintbox zu zeichnen?

Ich werde es versuchen.

little_budda 17. Sep 2007 13:06

Re: Löschen einer Paintbox verhindern
 
Wenn ich sowiso vorher das Bitmap erzeuge kann ich auch eine Timage Komponente verwenden ...

[Schreibfehler]

Matze 17. Sep 2007 13:08

Re: Löschen einer Paintbox verhindern
 
Zitat:

Zitat von little_budda
Erst das Bitmap erzeugen und danach die Paintbox füllen?
Ist das nicht dasselbe wie direkt in die Paintbox zu zeichnen?

Es ist schneller, zuerst auf ein internes Bitmap zu zeichnen und dieses mittels Delphi-Referenz durchsuchenbitblt auf der PaintBox auszugeben als direkt mit dem Canvas der PaintBox zu arbeiten.

little_budda 17. Sep 2007 13:16

Re: Löschen einer Paintbox verhindern
 
Hab schon in der Hilfe nachgesehen, aber was bitte ist "bitblt" ?

Matze 17. Sep 2007 13:24

Re: Löschen einer Paintbox verhindern
 
MSDN-Library durchsuchenBitBlt, deklariert in der Unit Windows. Ein Aufruf könnte so aussehen:

Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
begin
  BitBlt(PaintBox.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
end;
Natürlich könntest du auch Canvas.Draw nutzen, nur ist dies meines Wissens etwas langsamer, bin mir aber nicht sicher.

little_budda 17. Sep 2007 13:26

Re: Löschen einer Paintbox verhindern
 
Danke.

shmia 17. Sep 2007 13:35

Re: Löschen einer Paintbox verhindern
 
Es gibt ja nun 3 verschiedene Wege sowie deren Vor- und Nachteile
1.) direkt auf Paintbox zeichnen
+ günstig, wenn die Zeichenoperation nicht sehr aufwendig sind
+ wenn ständige Änderungen am Bild ausgegeben werden sollen
- Flackern kann auftreten
2.) auf TImage zeichnen
+ bei aufwändigen Zeichenoperationen
+ bei einmaligem Zeichnen oder Zeichnen auf Knopfdruck
- teilweiser Bildaufbau wird sichtbar
3.) auf internes Bitmap zeichnen und dieses auf TPaintbox kopieren
+ verhindert Flackern und Anzeige unvollständiger Bilder
- aufwändiger zu Programmieren


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