Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Enviar codigos de ESCAPE directamente a la impresora

868 views
Skip to first unread message

Víctor Glez.

unread,
Jan 24, 2001, 7:23:54 AM1/24/01
to
Pues eso, quiero controlar una impresora (Tickets) mediante los códigos de
"ESCAPE". He estado jugando con la funcion Escape del GDI pero no la soporta
la impresora. Existe otra funcion u otro método para ello. Alguien con
experiencia en este tema.

Saludos y gracias,
Víctor Glez.


Mindeye

unread,
Jan 24, 2001, 2:18:01 PM1/24/01
to
Intenta abriendo el puerto de la impresora como si fuera un archivo, con
Open:

Open "lpt1" For Output As #1
Print #1, "Hola"
Print #1, Chr(13)
Print #1, "¿Qué tal?"
Close #1

No recuerdo si tienes que ponerlo los dos puntos a "Lpt1", prueba a ver

Espero que te sirva,
Mindeye


Víctor Glez. <v...@ll.iac.es> escribió en el mensaje de noticias
3a6ec...@news.ll.iac.es...

zoOM2

unread,
Jan 24, 2001, 1:20:27 PM1/24/01
to
Escribe los códigos ESC directamente en el puerto.

Saludos desde Azkaban
zoOM2

Víctor Glez. <v...@ll.iac.es> escribió en el mensaje de noticias
3a6ec...@news.ll.iac.es...

Jhosen

unread,
Jan 25, 2001, 3:49:01 AM1/25/01
to
Hola Victor:

Te voy a dar una solucion, que ya esta probada. Al menos por aqui funciona.
Ya me las he tenido que ver con las impresoras de Tickets, Etiquetadoras, y
varios tipos de impresoras mas, en los que he usado estas funciones.

Las pruebas realizadas para enviar codigos ESC, desde el objeto Printer, no
me han funcionado. Por esta razon, me he remitido a las API Win32.

Otra cosa curiosa que me ha sucedido con las Impresoras de Tickets, es lo
siguiente:
Al imprimir con el objeto Printer, hasta que no se termine una pagina o el
documento, la impresora no comienza a imprimir. O sea, hasta que no ocurra
eso, Visual Basic no envia nada a la impresora.
Esto a veces tiene un gran problema, imaginemos una compra en un
supermercado, y que al final de la compra tengamos que esperar por la
impresion del Ticket. (Imaginemos ademas un ticket largo y que la impresora
sea de punto. Las termicas suelen ir como un tiro.)

Con las API no ocurre, cada linea se va enviando, por lo que la impresora
imprime a medida que se pasan productos por el Lector de Barras.

Hasta aqui el rollo. Te comentaba esto, porque me gustaria que expresaras
aqui tus experiencias y poder compartir criterios.


'//Declaraciones a nivel de modulo.

Public Type DOCINFO
pDocName As String
pOutputFile As String
pDatatype As String
End Type


'Win32 API external reference definitions
Public Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As
Long) As Long
Public Declare Function EndDocPrinter Lib "winspool.drv" (ByVal hPrinter As
Long) As Long
Public Declare Function EndPagePrinter Lib "winspool.drv" (ByVal hPrinter As
Long) As Long
Public Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA"
_
(ByVal pPrinterName As String, phPrinter As Long, ByVal pDefault As Long) As
Long
Public Declare Function StartDocPrinter Lib "winspool.drv" Alias
"StartDocPrinterA" _
(ByVal hPrinter As Long, ByVal Level As Long, pDocInfo As DOCINFO) As Long
Public Declare Function StartPagePrinter Lib "winspool.drv" _
(ByVal hPrinter As Long) As Long
Public Declare Function WritePrinter Lib "winspool.drv" (ByVal hPrinter As
Long, _
pBuf As Any, ByVal cdBuf As Long, pcWritten As Long) As Long


'//Codigo para Imprimir.

Dim lhPrinter As Long
Dim lReturn As Long
Dim lpcWritten As Long
Dim lDoc As Long
Dim sWrittenData As String
Dim MyDocInfo As DOCINFO

lReturn = OpenPrinter(Printer.DeviceName, lhPrinter, 0)

If lReturn = 0 Then MsgBox "Open Printer Error!"


MyDocInfo.pDocName = "SAMPLE"
MyDocInfo.pOutputFile = vbNullString
MyDocInfo.pDatatype = vbNullString
lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)

Call StartPagePrinter(lhPrinter)

sWrittenData = Chr(27) & "@" & Chr(27) & Chr(33) & "49"
sWrittenData = sWrittenData & "SEIKO EPSON ESC/POS" & Chr(13) & Chr(10)

lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, Len(sWrittenData),
lpcWritten)

lReturn = EndPagePrinter(lhPrinter)
lReturn = EndDocPrinter(lhPrinter)
lReturn = ClosePrinter(lhPrinter)


Bueno, en este caso no digo "Espero que te sirva" porque realmente sirve.

Saludos desde España,

Jhosen.


Víctor Glez. <v...@ll.iac.es> escribió en el mensaje de noticias
3a6ec...@news.ll.iac.es...

0 new messages