20 de diciembre de 2015

Imprimir imágenes individuales

Artículo original: PRINT INDIVIDUAL IMAGES
http://weblogs.foxite.com/vfpimaging/archive/2006/05/16/1531.aspx
Autor: Cesar Ch.
Traducido por: Ana María Bisbé York


He visto en la Web algunos ejemplos que muestran cómo imprimir imágenes individuales directamente a la impresora. No se por qué; pero en algunas situaciones los ejemplos no funcionan. Posiblemente o probablemente sea ¿un bug del desarrollador? :(

Una de las formas más sencillas y seguras para hacer esta tarea es utilizar el Diseñador de informes nativo, y dejar que VFP se encargue de todo el proceso de impresión.

Debajo hay un ejemplo que recibe un archivo de imagen como un parámetro, crea el informe al vuelo, y agrega un objeto imagen OLE que va a imprimir la imagen seleccionada.

Este ejemplo se basa totalmente en MSKB 895602 "How to print pictures and how to display pictures that are stored in a Blob field in Visual FoxPro 9.0". El código adaptado debe trabajar en cualquier versión de VFP. Gracias a Trevor Hancock y MSDN. El código es fácil de entender. Puede cambiar fácilmente la posición de la imagen cambiando los valores HPOS y VPOS. Si quiere un ejemplo y necesita más información, vea en la Ayuda de VFP el tópico "Understanding and Extending Report Structure"

Guarde el código como PRINTIMAGE.PRG

Para imprimir una imagen, sólo hay que llamar PRINTIMAGE(GETPICT())

LPARAMETERS tcImage
*tcImage = GETPICT()
*--------------------------------------------------------
* Código VFP que muestra cómo imprimir archivos de imagen.
* Código adaptado del artículo 895602 de Microsoft Knowledge Base
* http://support.microsoft.com/kb/895602
*
* La mayor parte de este código y los comentarios son de
* Trevor Hancock, de MS
*--------------------------------------------------------
LOCAL lnArea
lnArea = SELECT()
CREATE CURSOR ReportTemp (ImageFile c(150))
INSERT INTO ReportTemp VALUES (tcImage)
*-- Llama a una función que crea un informe por programación.
*-- Se incluye aquí sólo para garantizar que este ejemplo se puede
*-- ejecutar tal cual, sin pedir al desarrollador que cree un
*-- informe manualmente.
MakeReport()
*-- Asegura que el cursor esté seleccionado,
*-- y luego ejecuta la Presentación preliminar del informe
*-- utilizando para ello, una instancia de nuestro Report Listener.
SELECT ReportTemp
REPORT FORM ___ImageReport PREVIEW
DELETE FILE "___ImageReport.fr*"
SELECT (lnArea)
RETURN
*--------------------------------
*-- Esta función crea un informe por programación
*-- con un control OLE Dependiente y otros archivos. Se incluye solamente
*-- con el propósito de demostrar su funcionamiento para que este
*-- código pueda ser ejecutado tal cual.
*-- Normalmente, usted creará su propio informe manualmente utilizando
*-- el diseñador de informes.
FUNCTION MakeReport
  CREATE REPORT ___ImageReport FROM ReportTemp
  *-- Abre el archivo de informe (FRX) como una tabla.
  USE ___ImageReport.FRX IN 0 ALIAS TheReport EXCLUSIVE
  SELECT TheReport
  *-- Elimina del FRX las etiquetas y campos auto generados
  DELETE FROM TheReport WHERE ObjType = 5 AND ObjCode = 0 && Elimina las etiquetas
  DELETE FROM TheReport WHERE ObjType = 8 AND ObjCode = 0 && Elimina los campos
  *-- Agrega un control Picture/OLE Dependiente al informe añadiendo un registro
  *-- con los valores apropiados. Es más fácil de ver qué valores se
  *-- corresponden con los campos
  *-- GATHER NAME para añadir el registro (al comparar con un comando
  *-- SQL-INSERT) utilizando un objeto basado en la clase EMPTY y más tarde el comando
  LOCAL loNewRecObj AS EMPTY
  loNewRecObj = NEWOBJECT( 'EMPTY' )
  ADDPROPERTY( loNewRecObj, 'PLATFORM', 'WINDOWS' )
  ADDPROPERTY( loNewRecObj, 'Uniqueid', SYS(2015) )
  ADDPROPERTY( loNewRecObj, 'ObjType', 17 ) && "Control Picture/OLE Dependiente "
    ADDPROPERTY( loNewRecObj, 'NAME', 'ReportTemp.ImageFile' ) && Referencia de objeto al objeto IMAGE.
  ADDPROPERTY( loNewRecObj, 'Hpos', 100)
  ADDPROPERTY( loNewRecObj, 'Vpos', 600)
  ADDPROPERTY( loNewRecObj, 'HEIGHT', 100000)
  ADDPROPERTY( loNewRecObj, 'WIDTH', 100000)
  ADDPROPERTY( loNewRecObj, 'DOUBLE', .T. ) && La imagen se centra en el control "Picture/OLE Dependiente"
    ADDPROPERTY( loNewRecObj, 'Supalways', .T. )
  *-- Para el control Picture/OLE Dependiente, el contenido del campo OFFSET especifica si
  *-- Nombre de archivo (0), Nombre de campo General (1), o Expresión (2) es la fuente.
  ADDPROPERTY( loNewRecObj, 'Offset', 2 )
  *-- Añade el registro del control Picture/OLE Dependiente al informe.
  APPEND BLANK IN TheReport
  GATHER NAME loNewRecObj MEMO
  *-- Realiza la limpieza y cierra la tabla del informe.
  PACK MEMO
  USE IN SELECT( 'TheReport' )
ENDFUNC

No hay comentarios. :

Publicar un comentario