Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Screenshot von Panel als .bmp speichern? (https://www.delphipraxis.net/114571-screenshot-von-panel-als-bmp-speichern.html)

MrMyagi 27. Mai 2008 15:37


Screenshot von Panel als .bmp speichern?
 
Moin,
u d zwar habe ich jetzt schon herausgefunden, wie ich einen Screenshot von einem Panel
machen kann und zwar:

ScreenShot eines Fensters erstellen:

Hier eine Abwandlung der oberen Funktion. Hier wird das Ergebnis nicht gespeichet, sondern in eine Bitmap geladen:

Benötigt werden zwei Parameter:
Bitmap als Behälter
Handle des Fenster

Delphi-Quelltext markieren

// *** Erstellt von einem Formular ein ScreenShot ***
Delphi-Quellcode:
function FormularScreenShot(Bmp: TBitmap; h : hWnd): Boolean;
var
  Rec: TRect;
  iWidth, iHeight: Integer;
begin
  with Bmp do try
    GetWindowRect(h, Rec);


    iWidth := Rec.Right - Rec.Left;
    iHeight := Rec.Bottom - Rec.Top;


    Width := iWidth;
    Height := iHeight;


    BitBlt(Canvas.Handle, 0, 0, iWidth, iHeight, GetWindowDC(h), 0, 0, SRCCOPY);


    Result := True;
  finally
    ReleaseDC(h, GetWindowDC(h));
  end;
end;



Beispiel:

ScreenShot eines Panels erstellen und auf den Formular zeichnen:
Delphi-Quelltext markieren

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    FormularScreenShot(Bmp, Panel1.Handle);
    Canvas.Draw(20, 20, Bmp);
  finally
    Bmp.Free;
  end;
end;
Meine Frage nun allerdings ist, wie ich den Screenshot von dem Panel nun speichern kann, da er so nur auf der Form ausgegeben wird??


mfg, Nico

FAlter 27. Mai 2008 15:40

Re: Screenshot von Panel als .bmp speichern?
 
Hi,

Delphi-Referenz durchsuchenBmp.SaveToFile

Mfg
FAlter

MrMyagi 27. Mai 2008 15:41

Re: Screenshot von Panel als .bmp speichern?
 
Dankeschön, werde es gleich ausprobieren^^

Bentissimo 27. Mai 2008 16:00

Re: Screenshot von Panel als .bmp speichern?
 
Hi zusammen,

ich hab mal eine kleine Prozedur geschrieben mit der die Aufgabe generell gelöst werden kann, also nicht nur für ein Panel, sondern für jede von TWinControl abgeleitete Klasse.

Der Trick ist die Verwendung der Methode PaintTo(...).

Delphi-Quellcode:
   
procedure CreateScreenShot(AWinControl: TWinControl; AFileName: String);
var
   B: TBitmap;
begin
   B := TBitmap.Create;
   with AWinControl do
      begin
         B.Width := Width;
         B.Height := Height;
         PaintTo(B.Canvas, 0, 0);
      end;
   B.SaveToFile(AFileName);
   B.Free;
end;
Viele Grüße,
Stephan


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