![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 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