Hallo,
ich nutze folgenden Code um von meiner MainForm einen ScreenShot zu erstellen:
Delphi-Quellcode:
procedure ScreenShot_erstellen(Pfad:
String);
var
Bitmap : TBitmap;
Canvas : TCanvas;
WindowRect: TRect;
BitmapRect: TRect;
begin
//Bitmap erzeugen
Bitmap := TBitmap.Create;
//Canvas erzeugen
Canvas := TCanvas.Create;
//Handle für Canvas angeben
Canvas.Handle := GetWindowDC(GetDesktopWindow);
//Rect von MainForm holen
GetWindowRect(Application.MainForm.Handle, WindowRect);
try
BitmapRect := Rect(0, 0, WindowRect.Right - WindowRect.Left, WindowRect.Bottom - WindowRect.Top);
//Bitmap-Größe angeben
Bitmap.Width := WindowRect.Right - WindowRect.Left;
Bitmap.Height := WindowRect.Bottom - WindowRect.Top;
Bitmap.Canvas.CopyRect(BitmapRect, Canvas, WindowRect);
//nur für den Thread - eigentlich steht zum Speichern noch etwas mehr Code dahinter
Bitmap.SaveToFile(Pfad + '
Bild.jpg');
finally
//Bitmap löschen und freigeben
FreeAndNil(Bitmap);
//Canvas löschen und freigeben
ReleaseDC(0, Canvas.Handle);
FreeAndNil(Canvas);
end;
end;
Nur würde ich gerne nur einen ScreenShot vom Client-Bereich zu machen. Also alles innerhalb der Ränder/Taskleiste.
Ich vermute ich muss die Nullen bei:
BitmapRect := Rect(0, 0, WindowRect.Right - WindowRect.Left, WindowRect.Bottom - WindowRect.Top);
durch Startwerte ersetzen, die innerhalb des Fensters sind.
Nur weiss ich nicht wie ich an "ClientLeft" und "ClientTop" komme.
(Es gibt ja nur ClientWidth und ClientHeight)
Oder gibt es den Clientbereich als Rect?
mfg
Helmi
>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<