Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Screeshot aus einem bestimmten Bereich left-width und ... (https://www.delphipraxis.net/57213-screeshot-aus-einem-bestimmten-bereich-left-width-und.html)

torud 17. Nov 2005 10:47


Screeshot aus einem bestimmten Bereich left-width und ...
 
Hallo Wissende!

Ich möchte/muss einen Screenshot aus einem Teilbereich meiner Anwendung schiessen. Es ist ein Panel, von dem ich ein Bild benötige und ich weiss auch direkt welcher Bereich von dort benötigt wird.
Folgenden Code habe ich schon gefunden, um meinen Wunsch zu Realisieren.

In diesem Code wird vom Formular der Screenshot gemacht. Ich ersetze also einfach nur das Handle durch das auf´s Panel!? Die eigentliche Frage lautet aber, wie kann ich in dieser Routine sagen, dass ich den Screenshot von left=5 bis panel.width-5 und top=5 bis height-5 brauche???

Delphi-Quellcode:
var
  b1,b2:tbitmap;
  j:tjpegimage;
begin
  b1:=tbitmap.Create;
  b1.width:=self.Width-pan_left.width;
  b1.height:=self.Height;
  b1.canvas.handle:=GetWindowDC(Form1.Handle); // Desktop erfassen
  b2:=tbitmap.create;
  b2.width:=b1.width;
  b2.height:=b1.height;
  b2.Canvas.CopyRect(screen.desktoprect,b1.Canvas,screen.desktoprect);
  j:=tjpegimage.create;
  j.assign(b2);
  j.savetofile('C:\Screen.jpg');
  j.free;
end;
Ist sicher nur ne Kleinigkeit, oder?

Der_Unwissende 17. Nov 2005 11:05

Re: Screeshot aus einem bestimmten Bereich left-width und ..
 
Hm, obwohl du nur die Wissenden fragst antworte ich mal einfach.

Du kannst es recht einfach so machen
Delphi-Quellcode:
  bitmap := TBitmap.Create;
  bitmap.Width := destWidth; // Breite die du kopieren möchtest
  bitmap.Height := destHeight; // Höhe die du kopieren möchtest
  BitBlt(bitmap.Canvas.Handle, 0, 0, destWidth, destHeight, Form1.Canvas.Handle, (self.Panel1.Left + X_Offset), (self.Panel1.Top + YOffset), SRCCOPY);
Na ja, speichern und umwandeln in JPEG bekommst du ja selbst hin. Ansonsten musst du für BitBlt immer ein Canvas-Handle verwenden, also ist hier Form1.Canvas.Handle wichtig und richtig, Panel1.Handle würde dir nichts bringen (gibt ja Canvas von dem kopiert würde).

Gruß Der Unwissende


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