Buen día, jóvenes de DelphiAccess.
Requiero saber si es posible realizar programáticamente la captura del contenido de un TForm completo (es decir, de su aspecto en un momento dado), guardarlo en un archivo temporal de imagen o en la memoria de intercambio de Windows, y así incluirla en un control aparte o mandarla vía e-mail a otro usuario.
¿Podrían indicarme si es posible éste proceso? ¿Y cómo realizarlo?
Agradeciendo de antemano.
Capturar en pantalla el contenido de un TForm específico.
Started by
TiammatMX
, Dec 14 2011 11:21 AM
3 replies to this topic
#1
Posted 14 December 2011 - 11:21 AM
#2
Posted 14 December 2011 - 06:12 PM
No se exactamente que es lo que quieres, pero te pongo un ejemplo para copiar la imagen de un Form en un TImage, Tambien puede valer para un TBitmap...
delphi
var DC: HDC; WRect: TRect; begin DC:= GetWindowDC(Form1.Handle); Windows.GetWindowRect(Form1.Handle, WRect); Windows.StretchBlt(Image1.Canvas.Handle, 0, 0, Image1.Width, Image1.Height, DC, 0, 0, WRect.right-WRect.Left, WRect.Bottom-WRect.Top, SRCCOPY); ReleaseDC(Form1.Handle, DC) end;
Saludos.
#3
Posted 22 September 2014 - 07:14 AM
Buenas!
Necesito hacer algo parecido... Algo asi como lo que hace cualquier programa de captura de pantalla, pero sin usar el cursor para seleccionar el area, si no que ya tengo definidos mis valores para top, left, height y width.
Uso éste código:
Esto guarda a un archivo jpg el contenido de la ventana actual completa, tengo entendido que en la línea
puedo hacer el "crop"? aunque cuando he cambiado los valores, no corta la imagen si no que se "llena" con espacios en blanco. O tal vez no hace lo que pienso?
Agradezco cualquier ayuda de antemano.
Saludos
escafandra editó el mensaje para agregar etiqueta delphi
Necesito hacer algo parecido... Algo asi como lo que hace cualquier programa de captura de pantalla, pero sin usar el cursor para seleccionar el area, si no que ya tengo definidos mis valores para top, left, height y width.
Uso éste código:
delphi
procedure btn2Click(Sender: TObject); var DC: HDC; Pic: TJpegImage; Bitmap: TBitmap; Stream: TFileStream; begin DC := GetDC (GetForegroundWindow) ; try Pic := TJpegImage.Create; Bitmap := TBitmap.Create; try Bitmap.Width := GetDeviceCaps (DC, HORZRES) ; Bitmap.Height := GetDeviceCaps (DC, VERTRES) ; BitBlt(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, DC, 0, 0, SRCCOPY) ; Pic.Assign(Bitmap); Stream := TFileStream.Create('c:\temp\test.jpg', fmCreate); try Pic.SaveToStream(Stream); finally Stream.free; end; finally FreeAndNil(Pic); FreeAndNil(Bitmap); end; finally ReleaseDC (GetForegroundWindow, DC) ; end; end;
Esto guarda a un archivo jpg el contenido de la ventana actual completa, tengo entendido que en la línea
delphi
BitBlt(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, DC, 0, 0, SRCCOPY) ;
puedo hacer el "crop"? aunque cuando he cambiado los valores, no corta la imagen si no que se "llena" con espacios en blanco. O tal vez no hace lo que pienso?
Agradezco cualquier ayuda de antemano.
Saludos
escafandra editó el mensaje para agregar etiqueta delphi
#4
Posted 22 September 2014 - 10:06 AM
Para capturar la pantalla con tu código, debes realizar las siguientes modificaciones (marcadas con <==):
Saludos.
delphi
procedure btn2Click(Sender: TObject); var DC: HDC; Pic: TJpegImage; Bitmap: TBitmap; Stream: TFileStream; begin DC := GetDC (0) ; <== try Pic := TJpegImage.Create; Bitmap := TBitmap.Create; try Bitmap.Width := GetDeviceCaps (DC, HORZRES) ; Bitmap.Height := GetDeviceCaps (DC, VERTRES) ; BitBlt(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, DC, 0, 0, SRCCOPY) ; Pic.Assign(Bitmap); Stream := TFileStream.Create('c:\temp\test.jpg', fmCreate); try Pic.SaveToStream(Stream); finally Stream.free; end; finally FreeAndNil(Pic); FreeAndNil(Bitmap); end; finally ReleaseDC (0, DC) ; <== end; end;
Saludos.