Como tirar uma captura de tela com o FireMonkey (multi-plataformas)
Eu não encontrei uma função para obter uma captura de tela no FMX.Platform (de qualquer forma, em nenhum outro lugar ...).
Com o VCL, existem muitas respostas (stackoverflow, google, ...).
Mas como obter uma captura de tela em uma imagem (bitmap ou qualquer outro) para Windows e Mac OS X?
Saudações,
W.
Atualizar: oligação de Tipiweb dá uma boa solução para o OS X.
Em relação à parte do Windows: Eu codifiquei isso, mas eu não gosto de usar o VCL, e um Stream para alcançá-lo ... Alguma sugestão melhor, comentários?
Obrigado.
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>