Jak zrobić zrzut ekranu za pomocą FireMonkey (multi-platform)
Nie znalazłem funkcji do pobrania zrzutu ekranu w FMX.Platform (zresztą nigdzie indziej ...).
Z VCL jest wiele odpowiedzi (stackoverflow, google, ...).
Ale jak uzyskać zrzut ekranu na obrazie (mapa bitowa lub cokolwiek innego) dla Windows i Mac OS X?
Pozdrowienia,
W.
Aktualizacja: Thelink z Tipiweb daje dobre rozwiązanie dla OS X.
Odnośnie części Windows: Zakodowałem to, ale nie lubię używać VCL i Streamu, aby to osiągnąć ... Jakaś lepsza sugestia, komentarze?
Dzięki.
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>