Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-03-2008
sysmar sysmar is offline
Miembro
 
Registrado: feb 2008
Posts: 15
Poder: 0
sysmar Va por buen camino
Como imprimir en pto vitual USB001

Que tal amigos...

En muchas computadoras recientes ya no traen el puerto paralelo integrado, pero existen los adaptadores USB a CENTRONIC (que fue la solucion que adopte).

El detalle es que al instalar este tipo de adaptadores generan un puerto virtual (USB001, USB00x...) en Windows XP, para tener comunicacion con la impresora.

Estoy migrando una aplicacion FoxPro DOS 2.6 a Delphi 2007 (principiante) y las instrucciones para mandar imprimir que he encontrado son las siguientes:

procedure TForm2.Button1Click(Sender: TObject);
var
F: TextFile;
begin
AssignFile(F,'LPT1');
Rewrite(F);
WriteLn(F, 'Hello from Delphi.');
CloseFile(F);
end;

Esta prueba de impresion me funciono perfectamente para el puerto local LPT1, pero hice el cambio a USB001 y no manda imprimir la leyenda.

Podrian sugerirme alguna solucion.

Nota: Lo que deseo imprimir es el desgloce de partidas de una venta en una impresora para retail EPSON TM-U220, por lo que no es necesario configurar el tipo de hoja y margenes.

Gracias por su tiempo
Responder Con Cita
  #2  
Antiguo 26-03-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vamos a ver, esta función te puede útil:
Código Delphi [-]
function WriteRawDataToPrinter(PrinterName: String; Str: String): Boolean;
var
  PrinterHandle: THandle;
  DocInfo: TDocInfo1;
  i: Integer;
  B: Byte;
  Escritos: DWORD;
begin
  Result:= FALSE;
  if OpenPrinter(PChar(PrinterName), PrinterHandle, nil) then
  try
    FillChar(DocInfo,Sizeof(DocInfo),#0);
    with DocInfo do
    begin
      pDocName:= PChar('Printer Test');
      pOutputFile:= nil;
      pDataType:= 'RAW';
    end;
    if StartDocPrinter(PrinterHandle, 1, @DocInfo) <> 0 then
    try
      if StartPagePrinter(PrinterHandle) then
      try
        while Length(Str) > 0 do
        begin
          if Copy(Str, 1, 1) = '\' then
          begin
            if Uppercase(Copy(Str, 2, 1)) = 'X' then
              Str[2]:= '$';
            if not TryStrToInt(Copy(Str, 2, 3),i) then
              Exit;
            B:= Byte(i);
            Delete(Str, 1, 3);
          end else B:= Byte(Str[1]);
          Delete(Str,1,1);
          WritePrinter(PrinterHandle, @B, 1, Escritos);
        end;
        Result:= TRUE;
      finally
        EndPagePrinter(PrinterHandle);
      end;
    finally
      EndDocPrinter(PrinterHandle);
    end;
  finally
    ClosePrinter(PrinterHandle);
  end;
end;
Permite enviar datos directamente a la impresora, al igual que lo hacías antes a través del puerto paralelo, solo necesitas el nombre de la impresora. Si le echas un vistazo a la función seguro que averiguas como funciona y la puedes adaptar a tus necesidades, pero si te decides a utilizarla tal cual, el primer parámetro es el nombre de la impresora (tal cual aparece en la carpeta "Impresoras" de windows) y el segundo es el texto que se quiere enviar, con la particularidad que se pueden mandar secuencias de escape.

Por ejemplo, así mandaríamos el texto "Hola mundo":
Código Delphi [-]
WriteRawDataToPrinter('Mi impresora','Hola mundo');

Ahora lo mismo pero con un retorno de carro y avance de linea:
Código Delphi [-]
WriteRawDataToPrinter('Mi impresora','Hola mundo\x0D\x0A');

Y ahora un pitido (si la impresora lo soporta)
Código Delphi [-]
WriteRawDataToPrinter('Mi impresora','Hola mundo\x0D\x0A\x1B\007');

Estos días estoy probando unas nuevas impresoras de toshiba, de las que no acabo de encontrar sus secuencias de escape (logo, negrita, subrayado, etc ...). Así que me he creado una pequeña aplicación, donde puede escoger una impresora y mandarle una secuencia de escape, y así realizar algunas pruebas. Aquí te la dejo por si quieres hacer algunas pruebas:
Archivos Adjuntos
Tipo de Archivo: zip PrintTest.zip (5,9 KB, 370 visitas)
Responder Con Cita
  #3  
Antiguo 26-03-2008
sysmar sysmar is offline
Miembro
 
Registrado: feb 2008
Posts: 15
Poder: 0
sysmar Va por buen camino
Thumbs up muchas gracias por tu tiempo y solucion

esta excelente la solucion.

Voy hacer las pruebas al respecto estoy seguro que me va a funcionar tal y como lo necesito.

De verdad que eres todo un maestro.

Saludos
Responder Con Cita
  #4  
Antiguo 26-03-2008
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Buena solucion , pero puedes ademas utilizar el preport que permite imprimir en modo texto , secuencia de comandos etc , la buena solucion es que es un reporteador de manera visual soporta enduser y todas esas cosas asi te olvidas de programar reportes a mi me ha servido mucho

Lo malo de la primera opcion es cuando compartes una impresora con otro equipo , cuando mandan dos impresiones al mismo tiempo se mezclan si necesitas el preport te lo envio creo que ya no esta en la pagina de vtktools
__________________
IVAND
Responder Con Cita
  #5  
Antiguo 28-03-2008
sysmar sysmar is offline
Miembro
 
Registrado: feb 2008
Posts: 15
Poder: 0
sysmar Va por buen camino
Muchas gracias, de hecho ya puse a funcionar la solucion de seoane y me esta trabajando bien, mas sin embargo me gustaria evaluar tu solucion del preport sobre todo por lo del soporte enduser.

Si pudieras mandarmelo te lo agradeceria mucho.

Saludos
Responder Con Cita
  #6  
Antiguo 02-09-2014
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias por aporte,

Seoane, intente compilarlo en lazarus pero me da error en
Código Delphi [-]
if OpenPrinter(PChar(PrinterName), PrinterHandle, nil) then



Código:
unit1.pas(48,51) Error: Incompatible type for arg no. 2: Got "LongWord", expected "PHANDLE"
unit1.pas(50,21) Hint: Local variable "DocInfo" does not seem to be initialized
unit1.pas(57,37) Warning: Local variable "PrinterHandle" does not seem to be initialized
unit1.pas(73,54) Error: Incompatible type for arg no. 4: Got "LongWord", expected "PDWord"
unit1.pas(90) Fatal: There were 2 errors compiling module, stopping]
Primero lo saque directamente de tu codigo printtest, aunque de momento me interesa el que pusiste aqui.

No se puede compiar en lazarus, aunque le cambie el modo de sintaxis a delphi?

Lo que prentendo solo es imprimir en impresora de tickets y que solo imprima lo que envio y no me saque un feed del tamaño asignado.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject); 
 var    iImpresora : TextFile; 
 begin    
Assignfile(iImpresora,'LPT1'); //Puerto: LPT1, COM1, etc;    
Rewrite(iImpresora); 
 Writeln(iImpresora,'Esto debe salir por la impresora.');    
CloseFile(iImpresora);  
end;


[font=Arial]Este metodo no me funciona porque no imprime nada.

Código Delphi [-]
with Printer do      
begin        
PRINTER.PrinterIndex:=COMBOBOX1.ItemIndex;       
 r := Rect(200,200,(Pagewidth - 200),(PageHeight - 200));        
BeginDoc;        
Canvas.Brush.Style := bsClear;       
 for i := 0 to IMPRIMIR.Count -1 do        
 Canvas.TextOut(200,200 + (i *                    
 Canvas.TextHeight(IMPRIMIR.Strings[i])),                    
 IMPRIMIR.Strings[i]);        
 Canvas.Brush.Color := clBlack;       
 Canvas.FrameRect(r);       
 EndDoc;


Este si funciona pero me hace feed de papel.

La impresora es una epson tm-u220pa por puerto paralelo.

Tambien he visitado la pagina de epson en relación a los codigos

Código:
PRINT #1 "Hola"; -Imprime texto
PRINT #1 CHR$(&H1B); "d"; CHR$(11); -Avanza 11 líneas 
PRINT #1 CHR$(&H1B); "i"; -Ejecuta corte completo
Pero primero hay que hacer un assignfile que no funciona.

Alguna idea del cómo, ya no se donde mas buscar.


Gracias y perdon por ser tan largo.

Última edición por anubis fecha: 02-09-2014 a las 03:57:57.
Responder Con Cita
  #7  
Antiguo 04-09-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Para compilar con Lazarus debes realizas los cambios siguientes:

Código Delphi [-]
uses
  Windows, Printers, Winspool;

function WriteRawDataToPrinter(PrinterName: String; Str: String): Boolean;
var
  PrinterHandle: THandle;
  DocInfo: TDocInfo1;
  i: Integer;
  B: Byte;
  Escritos: DWORD;
begin
  Result:= FALSE;
  if OpenPrinter(PChar(PrinterName), @PrinterHandle, nil) then
  try
    FillChar(DocInfo,Sizeof(DocInfo),#0);
    with DocInfo do
    begin
      pDocName:= PChar('Printer Test');
      pOutputFile:= nil;
      pDataType:= 'RAW';
    end;
    if StartDocPrinter(PrinterHandle, 1, @DocInfo) <> 0 then
    try
      if StartPagePrinter(PrinterHandle) then
      try
        while Length(Str) > 0 do
        begin
          if Copy(Str, 1, 1) = '\' then
          begin
            if Uppercase(Copy(Str, 2, 1)) = 'X' then
              Str[2]:= '$';
            if not TryStrToInt(Copy(Str, 2, 3),i) then
              Exit;
            B:= Byte(i);
            Delete(Str, 1, 3);
          end else B:= Byte(Str[1]);
          Delete(Str,1,1);
          WritePrinter(PrinterHandle, @B, 1, @Escritos);
        end;
        Result:= TRUE;
      finally
        EndPagePrinter(PrinterHandle);
      end;
    finally
      EndDocPrinter(PrinterHandle);
    end;
  finally
    ClosePrinter(PrinterHandle);
  end;
end;

Saludos.
Responder Con Cita
  #8  
Antiguo 04-09-2014
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
sí, gracias, las units del uses ya las tenia puestas, ya reviso de nuevo sino da error.
de todas formas agarre el ejemplo q viene con Lazarus sobre raw y si funciona aunque meterle códigos especiales, como q corte la hoja, esta difícil.
gracias por contestar
Responder Con Cita
  #9  
Antiguo 17-10-2014
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
hice unas pruebas con este codigo...
el problema es que por cada linea impresa no me salta la linea
como soluciono eso??
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #10  
Antiguo 27-04-2016
felixbcastillo felixbcastillo is offline
Registrado
NULL
 
Registrado: abr 2016
Posts: 1
Poder: 0
felixbcastillo Va por buen camino
Seoane...La verdad que muchas...muchas gracias!
Tu codigo, aunque es del 2004 es lo que me pudo resolver el poder abrir la gaveta en en un impresora USB ahora en el 2016 y Delphi 10 Seattle

Dios te colme de bendiciones...
GRACIAS!
Responder Con Cita
  #11  
Antiguo 30-03-2017
enterleo enterleo is offline
Registrado
 
Registrado: feb 2006
Posts: 3
Poder: 0
enterleo Va por buen camino
Cita:
Empezado por IVAND Ver Mensaje
Buena solucion , pero puedes ademas utilizar el preport que permite imprimir en modo texto , secuencia de comandos etc , la buena solucion es que es un reporteador de manera visual soporta enduser y todas esas cosas asi te olvidas de programar reportes a mi me ha servido mucho

Lo malo de la primera opcion es cuando compartes una impresora con otro equipo , cuando mandan dos impresiones al mismo tiempo se mezclan si necesitas el preport te lo envio creo que ya no esta en la pagina de vtktools
buenas tardes ser posible que me envies ese componente a mi correo porfavor.

Última edición por Casimiro Notevi fecha: 30-03-2017 a las 18:58:37. Razón: Eliminar email
Responder Con Cita
  #12  
Antiguo 30-03-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por enterleo Ver Mensaje
buenas tardes ser posible que me envies ese componente a mi correo porfavor.
Lee nuestra guía de estilo, gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Como imprimir sin? superhopi Impresión 3 13-04-2007 05:46:45
¿Cómo imprimir? roman Linux 15 21-03-2007 21:53:36
como imprimir?? mminorm Impresión 6 01-06-2005 09:57:20
Como imprimir......... pampitasnowman Impresión 3 20-08-2003 22:24:16


La franja horaria es GMT +2. Ahora son las 18:12:58.


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