clase tprinter como destruir el objeto oprn sin que imprima

clase tprinter como destruir el objeto oprn sin que imprima

Postby mikeone » Sat Nov 10, 2012 6:50 am

Saludos cordiales a todos los foreros.

El caso es el siguiente.

Uso la clase tprinter para que el usuario elija la impresora de su preferencia, una vez elegida realizo un analisis de resolución para saver que tipo de impresora eligio, ya que mis formatos de salida se adaptan al tipo de impresora, ya sea laser, inyeccion, matriz o incluso las POS que nos dan tantos dolores de cabeza.
de esa manera determino cual clase va a usar el sistema para generar el reporte
Ejemplo:

do while .t.

if vtippap == 1 // una variable para determinar el tipo de papel configurado por el usuario 1= continuo las POS , 2 = hoja completa
SoportaGra = .f.
aImpresoras := aGetPrinters()
LEXISTEIMP := .F.
FOR X:=1 TO LEN(aImpresoras)
if alltrim(upper(aImpresoras[x])) == alltrim(upper(CMIIMPREDEFAULT))
LEXISTEIMP := .t.
exit
endif
next x

if LEXISTEIMP == .f.
msginfo("La Impresora predeterminada ya no existe"+CRLF+;
CMIIMPREDEFAULT,"Alerta")
return(nil)
endif

cpuerto := iif(substr(vpuerto,1,3)="USB","C:\FILESAL.PRN",vpuerto) // cpuerto es el resultado, vpuerto el la variable de mi sistema para indicar el puerto
LARCHIVO := iif(substr(vpuerto,1,3)="LPT",.F.,.T.) // indico si es archivo o directo al puerto
oPrn := TDosPrn():New( cpuerto,LARCHIVO ) //iniciamos el objeto tdosprn.
oPrn:command( INICIAPRN ) // iniciamos la impresora
oPrn:Command( oPrn:cCompress )
oPrn:nLinea := 1 // Inicializamos nuestro contador de Renglones // una modificacion que le hice a la clase

else
if vSelecImpre = .T.
if vTVistPre = .T.
myPRINT oPrn FROM USER PREVIEW TITLE ctitulo
else
myPRINT oPrn FROM USER TITLE ctitulo
endif
else //Epson lx-300
if vTVistPre = .T.
myPRINT oPrn FROM USER to &Imprimir_en PREVIEW TITLE ctitulo
else
myPRINT oPrn to &Imprimir_en TITLE ctitulo
endif
endif
oPrn:lPrvModal := .t.
vtippap := 2
endif

if vtippap == 1
cModel := alltrim(CMIIMPREDEFAULT)
else
cModel := oPrn:GetModel() // impresora elegida por el usuario
endif

if vtippap == 1
...parametros y variables para tdosprn
else
if oPrn:nLogPixelX() <= 100 // matriz de puntos mini

if alltrim(UPPER(cModel)) != alltrim(UPPER(CMIIMPREDEFAULT)) // impresora 2 = en archivo cmodel es la impresora que seleciono el usuario y CMIIMPREDEFAULT es la que habia eligido para default el usuiario, pensando en que desea mandar el reporte a otra impresora
vtippap := 1 // tipo de papel continuo 2= hoja completa
oPrn:end()
CMIIMPREDEFAULT := cModel // aqui indico la impresora que selecciono el usuario con la clase tprinter y hago un loop para que inicie nuevamente el proceso pero indicando que impresora debe usar el sistema y el tipo de papel en este caso hoja continua.
loop
endif
endif
exit
enddo

la idea es que si el usuario eligio una impresora de matriz de puntos debo eliminar el objeto oprn generado con tprinter para que se inicie ahora con la tdosprinter y al eliminar el objeto con oprn:end() me envia una pagina en blanco a la impresora y despues inicia la impresion con tdosprn, estube checando la clase rpreview para ver como hace para salir sin imprimir pero no he encontrado el hilo, gracias de ante mano a todos los que deseen ayudar, y espero les sirva de algo el ejemplo para las famosas POS
mikeone
 
Posts: 2
Joined: Sat Aug 07, 2010 4:01 am

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 43 guests