Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Paintbox speichern (https://www.delphipraxis.net/100212-paintbox-speichern.html)

Delphieinsteiger 24. Sep 2007 17:29


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!

torud 24. Sep 2007 18:12

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...

Delphieinsteiger 25. Sep 2007 17:13

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!

s-off 25. Sep 2007 17:33

Re: Paintbox speichern
 
Hallo,

kopiere den Inhalt vom Canvas Deiner PaintBox auf das Canvas Deines Images mittels
Delphi-Quellcode:
Image.Canvas.CopyRect(Image.Canvas.ClipRect, PaintBox.Canvas, PaintBox.Canvas.ClipRect);
Anschließend speicherst Du das Ganze mit
Delphi-Quellcode:
Image.Picture.SaveToFile

Delphieinsteiger 25. Sep 2007 17:50

Re: Paintbox speichern
 
Das klappt Super!!
Vielen Dank,damit ist ein weiteres Problem gelöst!

s-off 25. Sep 2007 18:07

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.

shmia 25. Sep 2007 18:15

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:
procedure TForm1.InternalPaint(Canvas:TCanvas);
begin
  // hier alle Zeichenfunktionen rein
end;
procedure TForm1.Paintbox1Paint(sender:TObject);
begin
   InternalPaint(PaintBox1.Canvas);
end;
Jetzt ist es ein Klacks die graphische Ausgabe auf ein TBitmap zu leiten.
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;

s-off 25. Sep 2007 19:27

Re: Paintbox speichern
 
Hallo Shmia,
Zitat:

Zitat von shmia
Anstatt den Canvas der Paintbox zu kopieren, wäre es sicher besser das Bitmap einfach neu zeichen zu lassen.

erklärst Du mir bitte, warum das besser ist? Aus meiner Sicht ist es anders, aber nicht unbedingt besser. Kläre mich bitte auf, sollte ich falsch liegen.

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?

Apollonius 25. Sep 2007 19:36

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.

s-off 25. Sep 2007 19:42

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.
Seite 1 von 2  1 2      

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