Jump to content


Photo

Capturar en pantalla el contenido de un TForm específico.


  • Please log in to reply
3 replies to this topic

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 14 December 2011 - 11:21 AM

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.
  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

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
  1. var
  2.   DC: HDC;
  3.   WRect: TRect;
  4. begin
  5.   DC:= GetWindowDC(Form1.Handle);
  6.   Windows.GetWindowRect(Form1.Handle, WRect);
  7.   Windows.StretchBlt(Image1.Canvas.Handle, 0, 0, Image1.Width, Image1.Height, DC, 0, 0, WRect.right-WRect.Left, WRect.Bottom-WRect.Top, SRCCOPY);
  8.   ReleaseDC(Form1.Handle, DC)
  9. end;



Saludos.
  • 0

#3 Pratasvenska

Pratasvenska

    Member

  • Miembros
  • PipPip
  • 38 posts
  • LocationSuecia

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:


delphi
  1. procedure btn2Click(Sender: TObject);
  2. var
  3.   DC: HDC;
  4.   Pic: TJpegImage;
  5.   Bitmap: TBitmap;
  6.   Stream: TFileStream;
  7. begin
  8.   DC := GetDC (GetForegroundWindow) ;
  9.   try
  10.     Pic := TJpegImage.Create;
  11.     Bitmap := TBitmap.Create;
  12.     try
  13.       Bitmap.Width := GetDeviceCaps (DC, HORZRES) ;
  14.       Bitmap.Height := GetDeviceCaps (DC, VERTRES) ;
  15.  
  16.       BitBlt(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, DC, 0, 0, SRCCOPY) ;
  17.  
  18.       Pic.Assign(Bitmap);
  19.  
  20.       Stream := TFileStream.Create('c:\temp\test.jpg', fmCreate);
  21.       try
  22.         Pic.SaveToStream(Stream);
  23.       finally
  24.         Stream.free;
  25.       end;
  26.     finally
  27.       FreeAndNil(Pic);
  28.       FreeAndNil(Bitmap);
  29.     end;
  30.   finally
  31.     ReleaseDC (GetForegroundWindow, DC) ;
  32.   end;
  33. end;



Esto guarda a un archivo jpg el contenido de la ventana actual completa, tengo entendido que en la línea


delphi
  1. 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
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 22 September 2014 - 10:06 AM

Para capturar la pantalla con tu código, debes realizar las siguientes modificaciones (marcadas con <==):



delphi
  1. procedure btn2Click(Sender: TObject);
  2. var
  3.   DC: HDC;
  4.   Pic: TJpegImage;
  5.   Bitmap: TBitmap;
  6.   Stream: TFileStream;
  7. begin
  8.   DC := GetDC (0) ;  <==
  9.   try
  10.     Pic := TJpegImage.Create;
  11.     Bitmap := TBitmap.Create;
  12.     try
  13.       Bitmap.Width := GetDeviceCaps (DC, HORZRES) ;
  14.       Bitmap.Height := GetDeviceCaps (DC, VERTRES) ;
  15.  
  16.       BitBlt(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, DC, 0, 0, SRCCOPY) ;
  17.  
  18.       Pic.Assign(Bitmap);
  19.  
  20.       Stream := TFileStream.Create('c:\temp\test.jpg', fmCreate);
  21.       try
  22.         Pic.SaveToStream(Stream);
  23.       finally
  24.         Stream.free;
  25.       end;
  26.     finally
  27.       FreeAndNil(Pic);
  28.       FreeAndNil(Bitmap);
  29.     end;
  30.   finally
  31.     ReleaseDC (0, DC) ;  <==
  32.   end;
  33. end;




Saludos.
  • 0




IP.Board spam blocked by CleanTalk.