Varios usuarios han tenido la necesidad de hacer capturas de pantalla desde su aplicación, así que me he puesto a ello y he escrito un pequeño componente para hacerlo directamente desde Xailer.
Las propiedades de este componente son:
-
PROPERTY cFilename, opcional, indica el nombre con el que salvar la captura.
PROPERTY lClientArea, indica si debe capturarse toda la ventana o sólo el área cliente.
Los métodos:
-
METHOD Capture( oControl | hWnd ), recibe un objeto o un manejador de control y captura su contenido en memoria. Si no recibe ningún parámetro hace la captura del escritorio.
METHOD Save( cFilename ), salva la captura como un bitmap. Si se omite el parámetro cFilename se usa el nombre asignado a la propiedad cFilename.
METHOD CopyToClipboard(), pone la captura en el clipboard en formato bitmap.
METHOD HardCopy( lPreview, cTitle ), envía la captura a impresora o a previsualización. Créditos a Bingen.
Unos ejemplos es el modo más sencillo de explicar el funcionamiento de este componente.
En el primero, vamos a capturar el contenido del área cliente del formulario de ejemplo y lo salvamos en un archivo «c:test.bmp»
METHOD Button1Click( oSender ) CLASS TForm1
WITH OBJECT TCaptureBitmap():New()
:cFilename := "c:test.bmp"
:lClientArea := .T.
:Capture( Self )
:Save()
END
RETURN Nil
En este otro, vamos a capturar el contenido del escritorio y lo vamos a salvar en «c:desktop.bmp».
METHOD Button2Click( oSender ) CLASS TForm1
WITH OBJECT TCaptureBitmap():New()
:Capture( GetDesktopWindow() )
:Save( "c:desktop.bmp" )
END
RETURN Nil
Y en este, capturamos el contenido de un TForm y lo enviamos a previsualizar:
METHOD Button2Click( oSender ) CLASS TForm1
WITH OBJECT TCaptureBitmap():New()
:Capture( Self )
:Hardcopy( .T., "Capturando desde Xailer" )
END
RETURN Nil
En la próxima revisión, añadiré soporte para guardar la captura en otros formatos como JPEG, PNG, etc.
El ZIP bmpcap.ZIP incluye la librería lista para usar desde el IDE.
NOTA: La librería es para la versión 1.7 o superior.
Saludos,
José Lalín