Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi paintbox Probleme (https://www.delphipraxis.net/1108-paintbox-probleme.html)

theomega 18. Okt 2002 17:09


paintbox Probleme
 
Hallo
ich habe in meinem Programm eine Paintbox. Wegen der Geschwindikeit will ich nicht auf TImage umsteigen. Nur zwei gravierende Nachteile von TPaintbox:
1. Wird nicht neugezeichent, wenn etwas davor war
2. Kann man nicht speichern

Wie kann ich beide Misstände beheben?

Danke

TO

jbg 18. Okt 2002 17:25

Du zeichnest in ein Hintergrundbitmap, dass du dann im OnPaint-Ereignis auf die Canvas der PaintBox kopierst.

Code:
bmp.Canvas.Rectangle(10, 10, 200, 200);
PaintBox1.Repaint; // Hintergrundbitmap auf Paintbox kopieren

OnPaint:
PaintBox1.Canvas.Draw(0, 0, bmp);
Das Bitmap kannst du ja ganz einfach speichern.

theomega 18. Okt 2002 17:40

könntest du mir das einmal ein bischen genauer erklären? Ich habe also auf meinem Form eine Paintbox (=paintbox1), und füge dann ein TImage (=image1) (richtig? Oder was ist ein Bitmap?) hinzu! Und in wessen OnPaint Event muß jetzt was hinein?

theomega 19. Okt 2002 16:38

Warum kann mir keiner das erklären?

Christian Seehase 19. Okt 2002 16:44

Moin The Omega,

wenn ich das richtig verstanden habe, meint jbg, dass das Bild in eine TBitmap gezeichnet, und dann im OnPaint des Formulares auf dem sich die PaintBox befindet neu gezeichnet werden soll, denn dieses Ereignis müsste ausgelöst werden, wenn es neu gezeichnet werden muss, also wenn es, z.B. verdeckt war und jetzt nicht mehr verdeckt ist.
(ich hab's jetzt nicht ausprobiert, aber so würde ich es mir erklären)

theomega 19. Okt 2002 16:58

Liste der Anhänge anzeigen (Anzahl: 1)
Oki, hat gefunzt, jetzt wird es aber ganz misteriös: ich will das Image auch speichern. Geht ja auch, nur das gespeicherte Bild, ich breiter als das Image ist und enthält in dem zu großen Teil meinen Desktop:
hier ein Beispiel:


Das ist kein Screenshot, sondern ein Bild, dass mit image1.savetofile gespeichert wurde!

[edit=Daniel B.]Bild gelöscht. Grosse Bilder bitte nur als Anhang, nicht zusätzlich im Posting angeben. Danke.[/edit]

jbg 19. Okt 2002 17:35

Wie hast du denn das Bitmap erzeugt, was zeichnest du in das Bitmap? Oder ist Image vielleicht ein TImage (vom Namen her)?

Christian Seehase 19. Okt 2002 17:37

Moin The Omega,

wie hast Du denn genau gespeichert. TImage.SaveToFile kennt zumindest mein D5 nicht.

Grundsätzlich kann ich es mir aber nur so erklären, dass die Grösse des Images halt zu breit ist.
Vergleich' doch mal, wie gross Image1.Picture.Width ist, und wie gross es sein soll.
Vielleicht kannst Du Dir damit behelfen, dass Du Image1.Picture.Bitmap.Width anpasst, oder aber Du verwendest gleich den von jbg vorgeschlagenen Weg, die Graphik auf ein Bitmap zu zeichnen (Typ TBitmap), und dann über PaintBox.Canvas.CopyRect auf die Paintbox zeichnest.
Dann könntest Du beim Speichern schlicht die Bitmap speichern, und die sollte ja stimmen.

theomega 19. Okt 2002 18:15

TImage (=image1) und TPaintbox (paintbox1) sind haargenau gleich groß, weil sie beide mein Forumlar mit alClient bedeken. Gespiechert habe ich mit
Code:
image1.Picture.SaveToFile(savedialog1.FileName);


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