Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#1

Screenshot vom Clientbereich der Mainform machen

  Alt 1. Apr 2012, 16:06
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! <<
  Mit Zitat antworten Zitat