Wie mache ich einen Screenshot mit FireMonkey (Multi-Plattformen)
Ich habe keine Funktion gefunden, um einen Screenshot in FMX.Platform zu erhalten (jedenfalls nirgendwo anders ...).
Mit der VCL gibt es viele Antworten (Stackoverflow, Google, ...).
Aber wie bekommt man einen Screenshot in einem Bild (Bitmap oder was auch immer) für Windows und Mac OS X?
Grüße,
W.
Aktualisieren: DasLink von Tipiweb gibt eine gute Lösung für OS X.
Zum Windows-Teil: Ich habe dies codiert, verwende aber nicht gerne die VCL und einen Stream, um dies zu erreichen ... Gibt es einen besseren Vorschlag, Kommentare?
Vielen Dank.
W.
<code>uses ..., FMX.Types, Winapi.Windows, Vcl.Graphics; ... function DesktopLeft: Integer; begin Result := GetSystemMetrics(SM_XVIRTUALSCREEN); end; function DesktopWidth: Integer; begin Result := GetSystemMetrics(SM_CXVIRTUALSCREEN); end; function DesktopTop: Integer; begin Result := GetSystemMetrics(SM_YVIRTUALSCREEN); end; function DesktopHeight: Integer; begin Result := GetSystemMetrics(SM_CYVIRTUALSCREEN); end; procedure GetScreenShot(var dest: FMX.Types.TBitmap); var cVCL : Vcl.Graphics.TCanvas; bmpVCL: Vcl.Graphics.TBitmap; msBmp : TMemoryStream; begin bmpVCL := Vcl.Graphics.TBitmap.Create; cVCL := Vcl.Graphics.TCanvas.Create; cVCL.Handle := GetWindowDC(GetDesktopWindow); try bmpVCL.Width := DesktopWidth; bmpVCL.Height := DesktopHeight; bmpVCL.Canvas.CopyRect(Rect(0, 0, DesktopWidth, DesktopHeight), cVCL, Rect(DesktopLeft, DesktopTop, DesktopLeft + DesktopWidth, DesktopTop + DesktopHeight) ); finally ReleaseDC(0, cVCL.Handle); cVCL.Free; end; msBmp := TMemoryStream.Create; try bmpVCL.SaveToStream(msBmp); msBmp.Position := 0; dest.LoadFromStream(msBmp); finally msBmp.Free; end; </code>