Resumen Objeto Printer (Condensar Draft)   (2 mensajes )

Bueno....pasarle códigos de "escape CHR(27)" a una impresora es un gran
problema que me torturo mucho tiempo.... pero en fin la solución es la
siguiente:
1) Debes instalar el driver ("GENÉRICO \ SOLO TEXTO") para controlar la
impresora matricial.
2) Ir al PANEL DE CONTROL --> Impresoras y entrar al cuadro de propiedades
de la misma, una vez allí debes entrar en el Tab de "Opciones del
Dispositivo" y centrar tu atención en frame de "MAPA DE CARACTERES
EXTENDIDO". Lo que debes hacer es asignarle a un carácter que no utilices,
como el 131 (â), el valor ASCII del código que quieres pasarle a la
impresora, ósea alt+15, ESC, alt+15, ESC, "M". De esta forma cuando con el
objeto printer imprimas ese caracter (â) el driver le va a enviar a la
impresora la secuencia que le introdujiste en en las propiedades.

Esto ocurre por que los ASCII >32 son de control y no tienen un A los
grafico para los drivers de Windows, ya que estos son los que se encargan
de enviar esas secuencias..... yo necesite hacerlo para usar una impresora
que tiene drivers para Windows.

Otra solución posible es mediante las APIS... Lo que estas haces es enviar
datos directamente a la cola de la impresora si que sean procesados antes
por los drivers.....
Las APIS son las siguientes:

'****** Declaraciones*******

Private Declare Function OpenPrinter& Lib "winspool.drv" Alias
"OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, ByVal
pDefault As Long) ' Third param changed to long

Private Declare Function StartDocPrinter& Lib "winspool.drv" Alias
"StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pDocInfo As
DOC_INFO_1)

Private Declare Function StartPagePrinter& Lib "winspool.drv" (ByVal
hPrinter As Long)

Private Declare Function WritePrinter& Lib "winspool.drv" (ByVal hPrinter As
Long, pBuf As Any, ByVal cdBuf As Long, pcWritten As Long)

Private Declare Function EndDocPrinter& Lib "winspool.drv" (ByVal hPrinter
As Long)

Private Declare Function EndPagePrinter& Lib "winspool.drv" (ByVal hPrinter
As Long)

Private Declare Function ClosePrinter& Lib "winspool.drv" (ByVal hPrinter As
Long)

'******Tipos de Datos*****
Private Type DOC_INFO_1
    pDocName As String
    pOutputFile As String
    pDatatype As String
End Type

'*******Uso de la funciones*********
Dim hPrinter&
Dim jobid&
Dim res&
Dim written&
Dim printdata$
Dim docinfo As DOC_INFO_1
res& = OpenPrinter("GENERICO \ SOLO TEXTO", hPrinter, 0)'Debes cambiar el
valor....
If res = 0 Then
    MsgBox "Unable to open the printer"
    Exit Sub
End If
docinfo.pDocName = "Prueba"
docinfo.pOutputFile = vbNullString 'App.Path + "\PRT2.PRT " (Imprimir a un
archivo)
docinfo.pDatatype = vbNullString
jobid = StartDocPrinter(hPrinter, 1, docinfo)
Call StartPagePrinter(hPrinter)
printdata$ = CadenadeInicializacion & CadenaAImprimir & CadenadeFinalizacion
& vbFormFeed
Call WritePrinter(hPrinter, ByVal printdata$, Len(printdata$), written)
Call EndPagePrinter(hPrinter)
Call EndDocPrinter(hPrinter)
Call ClosePrinter(hPrinter) ' Close when done

De esta forma no vas a tener problemas al momento de imprimir un CHR(27) por
que no va a ser impreso ya que va ir directamente a la configuración de la
impresora....

Bueno... espero que esto te sirva... ya que hace mas 50 minutos que estoy
preparando este MAIL. Jejejejejejejej....
Si es así , házmelo saber.
Saludos...

ALEJANDRO BEZARES
webmaster@e-printing.com.ar


-----Mensaje original-----
De: CELIMSA [mailto:CELIMSIE@AMAUTA.RCP.NET.PE]
Enviado el: Martes, 21 de Septiembre de 1999 01:09 p.m.
Para: visualbasic-esp@egroups.com
Asunto: (VB-ESP) Objeto Printer (Condensar Draft)




Sigo probando el objeto printer, pero no he logrado solucionar lo siguiente:

Tengo impresoras matriceras (por cierto muy lentas para tipos de letra
gráficas), utilizo el Font "Draft 12cpi" y Ok., pero cómo puedo hacer
para condensar mis listados, he probado los codigos que normalmente
se usan con clipper ó fox, osea no me responde el
Chr(15), Chr(27) & Chr(15), Chr(27) & "M"

Alguna propuesta de solución,

Desde ya muy agradecido

Jorge Torres Estrada




Hola Jorge,
Si utilizas el objeto "Printer", entonces toda la impresión irá por el
driver que tengas seleccionado.

Llegado a este punto, debes tener en cuenta que CREO que no es posible pasar
códigos escape, a traves del driver, eso tan solo lo he hecho imprimiendo
directamente en el puerto "LPT".

Nosotros utilizamos el driver "Generico solo/texto", para imprimir en
matriciales y asi conseguir el mismo rendimiento que bajo DOS. Ahora viene
lo bueno, que es como pasarle los códigos escape al driver "Generico
solo/texto", esto nos costó sudor y lágrimas pero lo conseguimos teniendo en
cuenta lo siguiente:

1º) Ve a propiedades del driver y escoge "Fuentes", aqui es donde debes
indicarle los códigos escape que utiliza tu impresora en aquellas opciones
que vayas a utilizar. Suponiendo que es compatible "IBM Proprinter"
deberemos poner lo siguiente:
10ppp/Normal ---> ^R
17ppp/Condensada ---> ^O
negrita activada ---> E
negrita desactiv.---> F
Donde el caracte ^ sale haciendo click en la tecla "Control" y
haciendo click en Esc.

2º) La forma de utilizar esto desde nuestro proyecto en VB seria:
Pasar a comprimido --> Printer.Font.Name = "Roman 17cpi"
Pasar a normal -----> Printer.Font.Name = "Roman 10cpi"
Pasar a negrita -----> Printer.Font.Bold=True
Quitar negrita ------> Printer.Font.Bold=False

3º) No olvides seleccionar la pestaña "Opciones de dispositivo", cuando
estes en las propiedades para hacer lo siguiente:
-Indicar el tamaño del papel. Para el pijama standar de toda la vida el de
66 lineas deberas poner CB en el apartado "Tamaño del papel"
-Selecciona el radio boton "Pagina de codigo 437"

4º) Otra historia es como poder seleccionar distintos tamaños de papel. Si
alguien está interesado que los diga, pues es algo mas complicado.

Saludos
Jose Luis Palau
SACHA LONDON, S.L.
03600-ELDA (Alicante)
ESPAÑA




Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com