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 23-07-2014
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Si, instalas la unidad y luego le haces referencia con USES
__________________
Ya tengo Firma!
Responder Con Cita
  #2  
Antiguo 29-07-2014
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 22
hgiacobone Va por buen camino
Question

Cita:
Empezado por juanelo Ver Mensaje
Si, instalas la unidad y luego le haces referencia con USES
Disculpame pero soy medio lerdo con esto....
Que hago?
Pongo el .PAS en el mismo directorio con el resto de los archivos fuente y lo agrego al proyecto ?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
  #3  
Antiguo 29-07-2014
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 22
hgiacobone Va por buen camino
Unhappy

Nop... sigue sin funcionar.
1-Primero instale el componente.
2-Luego lo puse en el Form junto a un TOpenDialog.
3-Esto me permite abrir (y guardar en una variable TextFile) el archivo de texto que tiene la etiqueta. El formato es script EPL:
Código:
I8,A,001
Q508,024
q863
rN
S3
D7
ZT
JF
OD
R25,0
f100
N
B200,189,0,E30,4,8,130,B,"3836556465461"
A99,31,0,4,6,6,N,"Esto es un ejemplo"
P1
4-Leo y recojo cada linea y las envio a la impresora (mediante el componente):
Código Delphi [-]
procedure Enviar_Etiqueta(s : string);
begin
        with  RawPrint1 do 
        begin 
            DeviceName:= "IMPRESORA";  // nombre de la impresora que se obtiene de la variable Printer.-
            JobName = "ETIQUETA";
            Try
                if OpenDevice = False then
                  raise exception.Create('Error en impresora.')
                  else begin 
                      AssignFile(fTextFile, OpenDialog1.FileName );
                      Reset(fTextFile);
                      try
                        While Not Eof(fTextFile) do
                        begin
                           ReadLn(fTextFile, s);                
                           RawPrint1.WriteString(s);  //enviar comando
                        end;
                      finally
                          CloseFile(fTextFile);
                      end;
                  end;
            Finally
               CloseDevice;
            End;
        end;
end;

No imprime nada...nada...nada...
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
  #4  
Antiguo 29-07-2014
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Preguntas:
¿se abre correctamente el dispositivo (impresora)?
¿La impresora a la que madas está correctamente instalada ?
¿si es interfaz usb, está correctamente asignado el puerto en la impresora (lista de impresoras)?
__________________
Ya tengo Firma!
Responder Con Cita
  #5  
Antiguo 29-07-2014
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 22
hgiacobone Va por buen camino
Exclamation

Cita:
Empezado por juanelo Ver Mensaje
Preguntas:
¿se abre correctamente el dispositivo (impresora)?
¿La impresora a la que madas está correctamente instalada ?
¿si es interfaz usb, está correctamente asignado el puerto en la impresora (lista de impresoras)?
Si a todo... ;-)
De hecho, desde el mismo driver de la impresora (Propiedad de la Impresora en entornos Windows), tiene una solapa "Herramientas" con la opción "Enviar fichero", desde el cual cargo y subo el mismo archivo script y lo imprime al instante.

Con esto concluyo que tanto la impresora como el archivo script son correctos.

He visto que otros colegas mandan todos los comandos concatenados e una sola llamada, cosa que tambien he probado, al estilo:
Código Delphi [-]
Procedure Imprimir_Etiqueta;
var
  L,Q1,A,A1,B,C,D,E:String ;
begin
        with  RawPrint1 do 
        begin 
            DeviceName:= "IMPRESORA";  // nombre de la impresora que se obtiene de la variable Printer.-
            JobName = "ETIQUETA";
            Try
              L:=chr(13)+Chr(10);
              Q1:='q500'+L;
              A1:='A220,10,0,1,1,1,N,"ESTO ES UN TEXTO"+L ;
              B:='B220,30,0,E30,2,20,100,B,'+'"ABC1234"'+L ;
              C:='A440,50,0,3,1,1,N,"Leyenda"'+L;
              D:='A440,70,0,3,1,1,N,'+'"'+FormatFloat('0.00', Precio.Value)+'"'+L;
              E:='A210,20,1,1,1,1,N,'+'"'+DateToStr(date)+'"'+L;

                RawPrint1.WriteString(L+'N'+L+'O'+L+'S2'+L+'D7'+L+'ZT'+L+'Q250,10'+Q1+A+A1+B+C+D+E+'P1');
           
            Finally
               CloseDevice;
            End;
        end;
End ;
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
  #6  
Antiguo 29-07-2014
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Ok, te comento que yo mando todo el archivo de una sola vez.
Uso TStringList, con su metodo LoadFromFile. Usas luego la propiedad TStringList.Text para pasar todo el contenido de una sola vez. Te lo digo de pura memoria, no tengo el codigo a la mano.
Saludos
__________________
Ya tengo Firma!
Responder Con Cita
  #7  
Antiguo 04-08-2014
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 22
hgiacobone Va por buen camino
Thumbs up Finalizado / Solucionado

Bien amigos, al fin y al cabo lo hemos logrado solucionar entre todos, sobre todo con el "tip" final que indicó el amigo Juanelo respecto a que él lo hace mediante un TSringList...
De aquí que surgió entonces la pregunta: ¿Y que tiene de distinto enviar un TStringList que no tenga una linea obtenida de un archivo de texto?
En apariencia nada, pero sí tiene algo distinto... y al parecer es el "retorno de carro/fin de línea" que el comando ReadLn(fTextFile, s); parece quitar.

Tambien el hecho de que que de esa forma, Juanelo enviaba el script completo, en vez de enviarlo línea a línea. Asi que la primera aproximación fue cargar el archivo externo en un TMemo y enviarlo con el componente de Juanelo directamente al dispositivo, de la forma:
Código Delphi [-]
(...)
  try
    memo1.Lines.Clear;
    memo1.Lines.LoadFromFile(OpenDialog1.FileName);
    with RawPrint1 do
    begin
      DeviceName:= sPRN;
      JobName:= 'Desde componente Raw';
      Try
       if OpenDevice = False then
        raise exception.Create('Error en impresora.')
        else WriteString(memo1.Lines.Text);
      Finally
       CloseDevice;
      End;
    end;
  except
  on E:Exception do MessageDlg(E.Message, mtWarning, [mbOk],0);
  end; 
(...)
Esto funcionó a la perfección.
Después de algunas pruebas más, apareció la solución final que es un procedimiento/función que prescinde de la utilización del componente que tan gentilmente nos ofreció Juanelo, ya que básicamente hace lo mismo y es así:
Código Delphi [-]
{-------------------------------------------------------------------------------
  Nombre:  WriteRawStringToPrinter
  Creado el:  22/07/2014
  Obs:    Envia una instrucion RAW a una impresora
-------------------------------------------------------------------------------}
function Write_RAW_StringToPrinter(Comando, PrinterName :string): Boolean;
var
   PrinterHandle: THandle;
   N: DWORD;
   DocInfo1: TDocInfo1;
begin
  Result:= FALSE;
  if not OpenPrinter(PChar(PrinterName), PrinterHandle, nil) then
  begin
    ShowMessage('Error de impresora: ' + IntToStr(GetLastError));
    Exit;
  end
  else Try
      with DocInfo1 do
      begin
        pDocName := pChar('Imprimiendo etiqueta');
        pOutputFile:= pChar(#0);
        pDataType := pChar('RAW');
      end;

      if StartDocPrinter(PrinterHandle, 1, @DocInfo1) <> 0 then
      begin
          try
            if StartPagePrinter(PrinterHandle) then
            begin
              try
                Result:=( WritePrinter(PrinterHandle,pChar(comando),Length(comando), N)  );
                if not Result then ShowMessage('Error de impresora: ' + IntToStr(GetLastError));
              finally
                EndPagePrinter(PrinterHandle);
              end;
            end;
          finally
            EndDocPrinter(PrinterHandle);
          end;
      end;
  finally
    ClosePrinter(PrinterHandle);
  end;
end;

Como alternativa, para aquellos que como yo, gustan de llevar mayor control sobre cada instrucción, puede generarse la instrucción concatendado cadenas con los comandos EPL apropiados, de esta manera:
Código Delphi [-]
Function Imprimir_Etiqueta(A,B,C,D,E:string): boolean;
var
  sPRN, L, cadena, fin: string;
begin
    sPRN:= "IMPRESORA";  // nombre de la impresora que se obtiene de la variable Printer.-
    L:=Chr(13)+chr(10);
    cadena:= 'I8,A,001'+L;         //charset
    cadena:= cadena + 'Q360,024' +L;   //ancho en Dots (10mm=80Dots...1mm=8dots)
    cadena:= cadena + 'q480' +L;       //alto en Dots
    cadena:= cadena + 'rN' +L;      //disable double buffer
    cadena:= cadena + 'S3' +L;
    cadena:= cadena + 'D7' +L;
    cadena:= cadena + 'ZT' +L; //from Top
    cadena:= cadena + 'OD' +L; //Direct thermal //Od=Transfer ribbon
    {  cadena:= cadena + 'R191,0' +L;  //punto de referencia para datos centrados (si se utiliza, sobreescribe lo indicado por comando "q") }
    cadena:= cadena + 'f100' +L;   //cut position between labels
    cadena:= cadena + 'N' +L;     //clear image buffer

{Ejemplo donde se recibe datos como:
    A:='A52,49,0,4,1,1,N,"Impresión directa..."' +L;
    B:='B46,170,0,E30,4,8,70,B,"3836556465461"' +L;
    C:='A90,50,0,3,1,1,N,"Aquí hay una leyenda..."' +L;
    D:='A90,70,0,3,1,1,N,'+'"Precio: '+FormatFloat('0.00', 10.25)+'"' +L;
    E:='A50,20,1,1,1,1,N,'+'"Fecha: '+DateToStr(date)+'"' +L;
}
    
    fin:= 'P1'+L;
    cadena:= cadena +A+B+C+D+E + fin;

    Result:= Write_RAW_StringToPrinter(cadena, sPRN);
End;

Tip final: algo muy importante, es que la dimensión de la etiqueta debe estar muy bien configurada en el driver de la impresora y luego hay que lanzar un comando de auto-calibración para que ajuste bien la separación entre etiquetas (cut position), ya que estas impresoras realizan todo su trabajo en base a estos datos.
Esto es todo amigos...!
YAKO

Última edición por hgiacobone fecha: 04-08-2014 a las 04:19:59.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
impresora zebra con windows 7 y delphi Oscar Guzmán Impresión 6 24-09-2012 07:46:23
Imprimir con Zebra S4M usb emanuelbarrios Impresión 1 03-08-2012 09:51:47
Alguien sabe como se configura impresora Zebra MZ 320? mamcx Varios 0 08-02-2010 17:30:17
Cambiar la letra a la impresora zebra lp boondock13 Impresión 1 03-10-2007 09:48:43
Impresora Zebra TLP-2488 IVAND Impresión 4 02-02-2006 01:26:10


La franja horaria es GMT +2. Ahora son las 06:04:37.


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