Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2003
Newbie Newbie is offline
Miembro
 
Registrado: jul 2003
Ubicación: Veracruz, México
Posts: 30
Poder: 0
Newbie Va por buen camino
Imprimir directo al puerto paralelo.

Qué tal.

Tengo una impresora térmica a la cual quiero enviar una cadena que tiene que imprimir en código de barras.

Actualmente se utiliza para este propósito un programa en clipper con el siguiente código.

Código:
      Esc=chr(27)
      SET PRINT ON
      ?Esc+'A'
      ?Esc+'A3H400V0001'
      ?Esc+'H00'+Esc+'V005'+Esc+'L0206'+Esc+'WB1'+'VERACRUZ'
      ?Esc+'Q1'
      ?Esc+'Z'
Lo único que hace es tomar una cadena y mandarla directamente a la impresora. Lo que quisiera que me diejran, por favor, es cómo puedo hacer lo mismo desde delphi.

Recuerdo que en C podías abrir un File y direccionar tu salida a stdprint y con eso se lograba lo que deseo, pero en Delphi ya no sé como hacerle. Estoy viendo lo de TStream y con el mismo TFile, pero si alguien conoce la manera, se los agraceceré bastante.

Gracias
Responder Con Cita
  #2  
Antiguo 27-09-2003
obiwuan obiwuan is offline
Miembro
 
Registrado: may 2003
Posts: 488
Poder: 22
obiwuan Va por buen camino
Una de las posibles formas:

Código:
uses printer;
.......
write(lst, chr(27) + 'A');
write(lst, #27 + 'A3H400V0001');
......
Hay otras posibles formas para hacer esto mismo.

NOTA: Según las versiones de Delphi, la unidad printer está o no definida, en cuyo caso hay que modificar el uses por un trozo de código tal que así:

assign(lst, 'prn');
rewrite(lst);
Responder Con Cita
  #3  
Antiguo 27-09-2003
Newbie Newbie is offline
Miembro
 
Registrado: jul 2003
Ubicación: Veracruz, México
Posts: 30
Poder: 0
Newbie Va por buen camino
Muchas gracias por tu respuesta. Pero dime ¿Cuáles son esas otras maneras de imprimeir directamente al puerto?

Lo que tú me sugeriste me pide que tenga instalada una impresora por defecto, pero yo no la tengo instalada. Cabe señalar que la impresora de etiquetas no usa drivers, sino que recibe datos directamente del puerto y lo que le mandas le tiene que llegar tal cual es. Esto genera un problema al tener un driver instalado, pues cada vez que imprimes, envía caracteres de control. Lo que yo necesito es que solamente mande lo que yo estoy enviando, sin caracteres de control, pues eso impide que funcione correctamente.

Gracias.
Responder Con Cita
  #4  
Antiguo 28-09-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Para lo que quieres hacer lo mejor es utilizar la impresora Genérico/Sólo texto

Este ejemplo está en otro lenguaje, pero ocurre que lo he hecho hace poco y sabía que lo tenía a mano, pero creo que para que te hagas una idea puede servirte:

Código:
Private Sub MP1_Click()
Dim Cont As Integer

Set Printer = Printers(Cont)
Do While Printer.DeviceName <> "Genérico/Sólo texto"
    Cont = Cont + 1
    If Cont > (Printers.Count - 1) Then
        Set Printer = Printers(0)
        MsgBox "ERROR. No existe la Impresora: Genérico/Sólo texto"
        Exit Sub
    Else
        Set Printer = Printers(Cont)
    End If
Loop


Printer.Print "~EF~EG"
NOTA: Ojo con el nombre de la impresora, porque esta rutina me tuvo una tarde parado, ya que hay que asegurarse que la impresora se llama así, a mi me ocurrio que en la versión anterior de Windodws se llamaba "Genérico / Solo texto", es decir tenía un espacio entre la barra.

Un Saludo y espero te sirva la idea.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 28-09-2003
Newbie Newbie is offline
Miembro
 
Registrado: jul 2003
Ubicación: Veracruz, México
Posts: 30
Poder: 0
Newbie Va por buen camino
Gracias a ambos por sus respuestas. De las dos ideas hice un programita que funciona y que envía a la impresora lo que tiene que salir, pero desafortunadamente no está imprimiendo lo que debiera. Voy a verificar el manual de la impresora(que trae un código en lenguaje basic para MS-DOS) y a checar si lo que estoy mandando es lo que la impresora debe recibir, pues puede haber alguna diferencia en la manera que imprime el controlador genérico / solo texto y la manera como basic o clipper mandan los datos a la impresora cuando especificas ya sea con el "set print on"(clipper) o con el PRINTL(basic). He pensado que tal vez sea por el caracter de final de línea, pero es lo que voy a investigar.

También se me ha ocurrido hacer una función que me envíe una cadena directamente al puerto paralelo, pero ocurre que la función que escribe al puerto paralelo recibe un byte y la cadena está formada por datos de tipo char. Luego entonces, al mandar el char a la función me dice que los tipos son incompatibles. ¿Tienen alguna sugerencia al respecto?

De nuevo, muchas gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:16:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi