Ich versuche ein Screenshot mit folgendem Code zu machen:
Delphi-Quellcode:
procedure TCover.ScreenToFile(aFileName: string);
var
Bitmap: TBitmap;
JPG : TJPEGImage;
Canvas: TCanvas;
begin
Canvas := TCanvas.Create;
try
Canvas.Handle := GetWindowDC(0);
Application.ProcessMessages;
try
Bitmap := TBitmap.Create;
Application.ProcessMessages;
JPG := TJPEGImage.Create;
Bitmap.PixelFormat:=pf32bit;
Application.ProcessMessages;
try
Bitmap.Width := Screen.DesktopWidth;
Bitmap.Height:= Screen.DesktopHeight;
Bitmap.PixelFormat := pfDevice;
Application.ProcessMessages;
BitBlt(Bitmap.Canvas.Handle, 0, 0, Pred(Screen.DesktopWidth), Pred(
Screen.DesktopHeight), Canvas.Handle, Screen.DesktopLeft,
Screen.DesktopTop, Bitmap.Canvas.CopyMode);
Application.ProcessMessages;
//Kompression
JPG.CompressionQuality:=50;
JPG.Assign(Bitmap);
Application.ProcessMessages;
if fileexists(aFileName) then
deletefile(aFileName);
JPG.SaveToFile(aFileName);
finally
//Größe
//resizepictur(aFileName,300,300);
Bitmap.Free;
JPG.Free;
end;
finally
ReleaseDC(0, Canvas.Handle);
Application.ProcessMessages;
end;
finally
Canvas.Free;
end;
end;
Der Aufruf:
Delphi-Quellcode:
procedure TCover.JvTransparentButton1Click(Sender: TObject);
begin
ScreenToFile('Screen1.jpg');
end;
Die in einer Image-Kompo zur Laufzeit über OpenPictureDialog geladenen Bilder werden einfach ignoriert. Lege ich ein Bild zur Entwurfszeit fest, funktioniert alles wunderbar.
Wo könnte der Haken sein?