seit langer Zeit versuche ich aus einem Programm einen Screenshot zu erstellen, in dem mein eigenes Form nicht dargestellt wird. In meiner Verzweiflung bin ich nun hingegangen und habe ein neues Projekt eröffnet und den Code aus https://wiki.freepascal.org/Developing_ ... the_screen (Taking a screen shot but excluding your application from the screenshot ) umgesetzt (copy&paste).
Bei diesem habe ich jedoch den selben Effekt ... das Form ist nach wie vor auf dem Screenshot zu sehen.
Fügt man hinter dem Sleep(2000); eine Inputbox ein, dann verschwindet das Form ... leider ist dann die Inputbox auf dem Screenshot
Hat hier jemand eine Idee für mich? Danke schon mal!
Infos zu freepascal/lazarus:
Lazarus 2.2.0+dfsg1-5ubuntu1 (rev Debian package 2.2.0+dfsg1-5ubuntu1) FPC 3.2.2 x86_64-linux-gtk2
Infos zum OS:
xubuntu 22.04.1 LTS
Lazarus wurde aus den Quellen installiert (sudo apt install lazarus )
Der Code:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
LCLIntf, LCLType;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
ScreenDC: HDC;
MyRec : TRect;
LocalBitmap : TBitmap;
//sFilename : String;
begin
Form1.Visible := False;
Sleep(2000); // wait to ensure your application is not visible
//sFilename := InputBox( 'speichern unter', 'Bitte Dateinamen ohne Endung eingeben:','MeinBildname') + '.bmp';
LocalBitmap := TBitmap.Create;
ScreenDC := GetDC(0);
Try
LocalBitmap.LoadFromDevice(ScreenDC);
LocalBitmap.SaveToFile('screenshot.bmp');
LocalBitmap.Free;
Form1.Visible := True;
finally
ReleaseDC(0, ScreenDC);
end;
end;
end.