![]() |
Paintbox speichern
Hi!
Wollte mal Fragen ob es möglich ist, wenn ich auf einen Button klicke, nur die Paintbox die sich in eine Scrollbox auf meiner Form befindet,mitsamt Inhalt (Koordinatensystem) auf meinem PC abzuspeichern.Habe gelesen das ich es mit SaveToFile lösen könnte, aber kann mir nicht so richtig vorstellen wie das geht.Für Ratschläge wäre ich Dankbar! |
Re: Paintbox speichern
Ich nehme an, dass Du den Inhalt des Canvas der Paintbox als Bild speichern willst?
Das geht relativ einfach. Suche einfach mal hier im Forum nach ScrollboxToCanvas...Damit würde Dir der gesamte Inhalt der Scrollbox in einen Canvas Deiner Wahl übergeben. Wenn Du Dir eine TImage creierst, könntest Du diesem den Canvas zuweisen und anschliessend das TImage als Bild speichern. Habe ich auch schon so gemacht... |
Re: Paintbox speichern
Danke für die Antwort Torud!!
Jetzt habe ich Dank der Prozedur von Omata die ich hier im Forum gefunden habe, meinen Scrollboxinhalt in einem Canvas gezeichnet.Jetzt weiß ich nur nicht genau wie ich diesen Canvas einen Timage zuweisen kann.Habe schon ein paar Versuche unternommen, aber die waren leider nicht von Erfolg gekrönt.Bin halt noch nicht solange dabei! |
Re: Paintbox speichern
Hallo,
kopiere den Inhalt vom Canvas Deiner PaintBox auf das Canvas Deines Images mittels
Delphi-Quellcode:
Anschließend speicherst Du das Ganze mit
Image.Canvas.CopyRect(Image.Canvas.ClipRect, PaintBox.Canvas, PaintBox.Canvas.ClipRect);
Delphi-Quellcode:
Image.Picture.SaveToFile
|
Re: Paintbox speichern
Das klappt Super!!
Vielen Dank,damit ist ein weiteres Problem gelöst! |
Re: Paintbox speichern
Wenn Du am TRect ein bissel schraubst, kannst Du den Quellbereich (PaintBox.Canvas.ClipRect) auch noch eingrenzen sowie den Zielbereich (Image.Canvas.ClipRect) festlegen.
|
Re: Paintbox speichern
Anstatt den Canvas der Paintbox zu kopieren, wäre es sicher besser das Bitmap einfach neu zeichen zu lassen.
Dazu sollte man die Zeichenroutinen in einer Methode (im Beispiel InternalPaint) konzentrieren:
Delphi-Quellcode:
Jetzt ist es ein Klacks die graphische Ausgabe auf ein TBitmap zu leiten.
procedure TForm1.InternalPaint(Canvas:TCanvas);
begin // hier alle Zeichenfunktionen rein end; procedure TForm1.Paintbox1Paint(sender:TObject); begin InternalPaint(PaintBox1.Canvas); end; Das ist viel sauberer, als der Vorschlag mit dem Image.
Delphi-Quellcode:
var
bmp : TBitmap; begin bmp := TBitmap.Create; try bmp.Width := Paintbox1.Width; bmp.Height := Paintbox1.Height; InternalPaint(bmp.Canvas); bmp.SaveTofile(...); finally bmp.Free; end; |
Re: Paintbox speichern
Hallo Shmia,
Zitat:
Die Unterschiede finde ich ehrlich gesagt nicht so gravierend. Du zeichnest auf den Canvas einer PaintBox, wenn gespeichert werden soll zusätzlich nochmal das Gleiche auf das Canvas eines Bitmaps. Ich zeichne auf den Canvas einer PaintBox und kopiere das Ergebnis auf ein Image, sofern gespeichert werden soll. Dabei kann ich zusätzlich die zu kopierenden Bereiche festlegen. Wo ist der Vorteil Deines Vorgehens? |
Re: Paintbox speichern
Ich persönlich hätte es ähnlich wie s-off gemacht, allerdings nur mit einem TBitmap statt mit einem TImage, denn wenn man sowieso nichts anzeigen will, halte ich das verwenden einer visuellen Komponenete für unsinnig.
Und ob ich die Sachen jetzt kopiere oder eben neu zeichne... Ich selbst würde, wie gesagt, fürs Kopieren plädieren, allerdings dürften die Unterschiede minimal sein. Bezüglich der zu kopierenden Bereiche: Ich denke da ließe sich beim Neuzeichnen etwas über Canvas.Cliprect machen. |
Re: Paintbox speichern
Ja, dass ein TBitmap in diesem Fall, also ohne Bildschirmausgabe besser geeignet wäre, gebe ich zu.
Habe das TImage aus dem ersten Vorschlag aufgegriffen und dummerweise nicht weiter drüber nachgedacht. Aber schauen wir mal, was shmia noch zu berichten hat - wenn er diesen Aufruf denn überhaupt sieht :-D |
Re: Paintbox speichern
Ich finde beide Lösungen gut!
Danke erstmal dafür,habe mich jetzt aber auch für die von S-Off entschieden.Habe nur noch das Problem das ich nicht die ganze Paintbox speichern kann sondern nur den Teil der innerhalb der Scrollbox zu sehen ist.Hatte ja versucht den ganzen Inhalt der Scrollbox in einem Canvas zu schreiben(Methode hatte ich hier im forum von omata gefunden).kann ich diesen gesamten Canvas dann nicht einfach auf ein TBitmap kopieren und dann abspeichern?Versuche das die ganze Zeit aber will nicht so richtig.Stell mich wohl nicht gerade clever an :wall: |
Re: Paintbox speichern
Zitat:
Der Benutzer drückt den Button zum Speichern. Nun verschwindet zufällig das Fenster, dass die Paintbox verdeckt hat. Die Paint-Message kommt zu spät; das Bild wurde schon verstümmelt gepseichert. 2. Vorteil - Die Farbtiefe Angenommen die Grafikkarte hat nur 256 Farben. Beim Kopieren kann das gespeicherte Bitmap dann natürlich auch nicht mehr Farben erhalten. Bei meiner Methode wäre das aber kein Problem; man könnte 16 Mio. Farben (24bit) speichern. 3. Vorteil - die Druckausgabe Wenn man eine Methode InternalPaint hat, kann man damit auch einfach auf den Printer.Canvas drucken. |
Re: Paintbox speichern
Danke shmia.
|
Re: Paintbox speichern
Bei mir ist das Icon PaintBox1 nicht zu finden
Wo finde ich das icon ? |
Re: Paintbox speichern
In D7 liegt es im Reiter System, direkt neben dem Timer.
|
Re: Paintbox speichern
Zitat:
habe ich nie gedacht, dass es in dem Reiter System liegen kann :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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