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 21-01-2008
mtirado mtirado is offline
Miembro
 
Registrado: mar 2007
Posts: 26
Poder: 0
mtirado Va por buen camino
Imprimir en Impresora Epson TM U220D

Hola a todos.
He intentado por todos los medios conocidos de imprimir un comprobante de venta en una impresora del tipo Epson TM U220D, pero la verdad que no puedo. Las dimensiones del papel son de 75 x 75 mm, pero no se cual es el tipo de papel, o al menos no aparece. Lo he probado imprimir en una impresora normal y si que lo hace pero cuando trato de hacerlo en una TM U220D, solo me toma la primera linea, pero ahi se para y no hace nada.
Primeramente imprimi directamente desde el canvas y luego desde el puerto LPT1, la primera forma solo me imprimio la primera linea pero con la 2da nada.
Alguien por favor podria decirme como puedo imprimir eso?
Sera de mucha ayuda.
Gracias.
Responder Con Cita
  #2  
Antiguo 21-01-2008
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
Con el Canvas te tiene que imprimir sin más problemas, por qué no nos pones el código que utilizas para imprimir con el "Canvas", y así ver en donde puede estar el problema.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 21-01-2008
mtirado mtirado is offline
Miembro
 
Registrado: mar 2007
Posts: 26
Poder: 0
mtirado Va por buen camino
sobre codigo.

Hola, mira aca te va un jemplo de como hago para imprimir, pero recuerda que no es desde una impresora normal y corriente, es en una para hacer tickets, perdona si este coentario esta de mas.

Printer.BeginDoc;
Printer.Canvas.TextOut(90, 90, LbComprobanteTexto.Caption);
Printer.Canvas.TextOut(90, 300, LbClienteTexto.Caption + LbCliente.Caption);
.....
Printer.EndDoc;


assignFile(Impresora, 'LPT1');
Write(Impresora, #27);
Writeln(Impresora, LbComprobanteTexto.Caption);
.....
CloseFile(Impresora);

Espero que esto sirva de ayuda para que me puedan entender y ayudar haber que es lo que puede ocurrir. Lo que creo que sea es que debo de poner el tamaño del papel, este debe ser de 75 x 75 mm.
Si alguien ha hecho algo parecido con este tipo de impresora por favor ayudenme.
Salduos.
Responder Con Cita
  #4  
Antiguo 21-01-2008
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
Código Delphi [-]
procedure SetPaperSize (intAlto,intAncho : Integer);
{aqui se define el tamaño del papel}
var
   ADevice, ADriver, APort : array [0..255] of Char;
   ADeviceMode : THandle;
   DevMode : PDevMode;
begin
   with Printer do
      begin
         GetPrinter (ADevice, ADriver, APort, ADeviceMode);
         SetPrinter (ADevice, ADriver, APort, 0);
         GetPrinter (ADevice, ADriver, APort, ADeviceMode);
         DevMode := GlobalLock(ADeviceMode);
         if not Assigned(DevMode) then
            ShowMessage('Ha entrado en -> if not Assigned(DevMode) ...')
         else
            begin
               with DevMode^ do
                  begin
                     dmPaperSize:= DMPAPER_User;
                     dmPaperLength := intAlto;
                     dmPaperWidth:= intAncho;
                     dmFields := dmFields or DM_PAPERSIZE or DM_PAPERLength or DM_PAPERWidth;
                  end;
               GlobalUnLock(ADeviceMode);
               SetPrinter(ADevice, ADriver, APort, ADeviceMode);
           end;
      end;
end;

procedure Imprimir_Alb_Fact(n:Integer);
var
Imprime_Pie:Boolean;
Imprimir:Boolean;
begin
Imprime_Pie:=False;
Imprimir   :=True;
//1 Albarán
//2 Factura
DmPan.Cli.IndexName:='';

SetPaperSize(DmPan.ImpresoraLargoPapel.Value, DmPan.ImpresoraAnchoPapel.Value);
Printer.Canvas.Font.Name:=DmPan.ImpresoraLetra.Value;
Printer.Canvas.Font.Size:=DmPan.ImpresoraTallaLetra.Value;

Case n of
1:begin
    if DmPan.AlbaContado.Value = True then
    Imprime_Pie:=True
    else
    Imprime_Pie:=False;

    if DmPan.UsuNivel.Value = '1' then
    begin
      if Application.MessageBox('¿Seguro que desea imprimir el Albarán?','Atención',mb_OkCancel +
      mb_IconQuestion)= idOk then
      Imprimir:=True
      else
      Imprimir:=False;
    end;

  end;
2:Imprime_Pie:=True;
end;

  if imprimir = True then
  begin

   With Printer.canvas do
   begin
    Printer.BeginDoc;

        Imprimir_Cabecera(n);
        Imprimir_Detalle(n);

        if Imprime_Pie = True then
        begin
        Imprimir_Pie(n);
        Imprimir_Total_Final(n);
        end;

    Printer.EndDoc;
   end;
  end;
end;

Con este ejemplo ves como puedes mandarle el tamaño del ticket a la impresora.

Veo que de 90 pasas a 300, no estará esa situación de línea fuera del ticket y por eso no se ve.

Las coordenadas normalmente sumándole 30 logras el cambio de fila, pero de 90 pasar a 300, creo que ya estás fuera del ticket.

Un Saludo.
__________________
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 21-01-2008
mtirado mtirado is offline
Miembro
 
Registrado: mar 2007
Posts: 26
Poder: 0
mtirado Va por buen camino
Gracias por el codigo.
El ejemplo que te puse fue hipotetico, es decir es ese mismo codigo pero solo tome algunas lineas, no todas, para que supieras como lo hacia, o que utilizaba.
En el ejemplo que me pones, como pudo ponerle el tamanno al papel, es decir, en mi caso que el papel debe medir de 75 mm por 75 mm, el valor que le entro es un integer, pero imagino que deba convertir (75). Imagina que lo que quiero es imprimir los datos de un cliente con los pedidos de productos que ha realizado, la anchra debe ser de 75 mm pero el largo va a depender de la cantidad de productos que ha seleccionado. Como puedo hacer eso? Disculpame pero es que nunca me he dedicado a imprimir.
En el codigo que me envias no veo el codifo de las funciones Imprimir_Cabecera(n); Imprimir_Detalle(n); me seria de ayuda para ver como lo mandas a imprimir, y que coordenadas utilizas.
Muchas gracias por todo.
Un abarzo.
Yunier.
Responder Con Cita
  #6  
Antiguo 21-01-2008
mtirado mtirado is offline
Miembro
 
Registrado: mar 2007
Posts: 26
Poder: 0
mtirado Va por buen camino
sobre tamanno

En la funcion que le pasas el tamanno le pasas dos integer, que debo hacer para ajustar los 75 por 75 mm al valor integer.
Por otro lado la variable DMDin o algo asi es una clase que contiene las caracteristicas de la impresion?
Gracias.
Responder Con Cita
  #7  
Antiguo 21-01-2008
mtirado mtirado is offline
Miembro
 
Registrado: mar 2007
Posts: 26
Poder: 0
mtirado Va por buen camino
Impresion y tamaño papel.

Hola nuevamente.
En mi tema anterior les comentaba que necesitaba imprimir un comprovante de venta con los datos del cliente y los productos que compro. El tique debe ser de una medida de 75 por 75 mm.
El moderador me dio un codigo donde podia entrar el tamanno del papel, pero lo que le paso son dos integer, como puedo hacer para llevar estas medidas en milimetros a integer?
El codigo es:
Código Delphi [-]
procedure SetPaperSize (intAlto,intAncho : Integer);
{aqui se define el tamaño del papel}
var
   ADevice, ADriver, APort : array [0..255] of Char;
   ADeviceMode : THandle;
   DevMode : PDevMode;
begin
   with Printer do
      begin
         GetPrinter (ADevice, ADriver, APort, ADeviceMode);
         SetPrinter (ADevice, ADriver, APort, 0);
         GetPrinter (ADevice, ADriver, APort, ADeviceMode);
         DevMode := GlobalLock(ADeviceMode);
         if not Assigned(DevMode) then
            ShowMessage('Ha entrado en -> if not Assigned(DevMode) ...')
         else
            begin
               with DevMode^ do
                  begin
                     dmPaperSize:= DMPAPER_User;
                     dmPaperLength := intAlto;
                     dmPaperWidth:= intAncho;
                     dmFields := dmFields or DM_PAPERSIZE or DM_PAPERLength or DM_PAPERWidth;
                  end;
               GlobalUnLock(ADeviceMode);
               SetPrinter(ADevice, ADriver, APort, ADeviceMode);
           end;
      end;
end;

Por otra parte, a la hora de pasarle al canvas lo que quiero imprimir, que copordenas les debo pasar para que se ajusten a mi papel. En caso de que la linea sobrepase la hoja que ocurre? Da un salto de linea o me corta lo que deseo escribir???
Por jemplo: Printer.Canvas.TextOut(90, 90, LbComprobanteTexto.Caption);

Muchas gracias a todos.
Yunier.

Última edición por marcoszorrilla fecha: 21-01-2008 a las 20:36:28. Razón: Etiquetas Delphi
Responder Con Cita
  #8  
Antiguo 21-01-2008
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
En tu ejemplo 75 x 75 sería: 7500 x 7500 ya que la medida es en mm por 1000

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #9  
Antiguo 22-01-2008
mtirado mtirado is offline
Miembro
 
Registrado: mar 2007
Posts: 26
Poder: 0
mtirado Va por buen camino
Sobre Impresion y tamanno del papel.

Entonces los parametros que le tendria que pasar al procedimiento del tramanno del papel seria 7500 y 7500.
Eso esta bien (en caso de que funcione claro).
Pero como es que le paso al canvas lo que deseo imprimir, en mi caso lo que debo hacer es canvas.textout(x,...), pero en que coordenada deberia empezar, como puedo jugar con las dimensiones del papel y el largo de la cadena que quiero imprimir??? No se si me entiendan?
Muchas gracias.



Cita:
Empezado por marcoszorrilla Ver Mensaje
En tu ejemplo 75 x 75 sería: 7500 x 7500 ya que la medida es en mm por 1000

Un Saludo.
Responder Con Cita
  #10  
Antiguo 22-01-2008
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
Le tienes que pasar los parámetros que te indico, pero claro según colijo tu estás hablando de longitud variable del ticket por lo tanto la altura no la conoces de antemano, aunque supongo que al llegar a los 29,7 Cm. del A4, dará un salto.

Para ceñirnos a lo que dices sería preciso calcular la relación líneas de ticket ->cms. de esta manera antes de pasarle el tamaño lo calcularíamos.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #11  
Antiguo 22-01-2008
mtirado mtirado is offline
Miembro
 
Registrado: mar 2007
Posts: 26
Poder: 0
mtirado Va por buen camino
saludos

Ok, entiendo lo que dices, imagina que le paso un tamanno por defecto de largo, pero el tamanno de ancho si tiene que ser de 75 mm. Pero a la hora pasarle el texto al canvas que cooredenadas debor tomar? Esa es mi prgunta.
Gracias.


Cita:
Empezado por marcoszorrilla Ver Mensaje
Le tienes que pasar los parámetros que te indico, pero claro según colijo tu estás hablando de longitud variable del ticket por lo tanto la altura no la conoces de antemano, aunque supongo que al llegar a los 29,7 Cm. del A4, dará un salto.

Para ceñirnos a lo que dices sería preciso calcular la relación líneas de ticket ->cms. de esta manera antes de pasarle el tamaño lo calcularíamos.

Un Saludo.
Responder Con Cita
  #12  
Antiguo 22-01-2008
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
Las coordenadasson desde lo márgenes superior e izquierdo del ticket, cuando llegas al final del ticket:

Printer.Canvas.NewPage;

así saltas a la siguiente página.
y las coordenadas vuelve a comenzar de nuevo por el principio.

Aquí te pego un fragmento de código que yo utilizo y funciona correctamente.

Código Delphi [-]
      While Not DmXX.LinAlba.Eof do
      begin
      nLin:=nLin + 1;
      
        if nLin > DmXX.ImpresoraLineasDetalle.Value then
        begin
        Printer.NewPage;
        nLin:=1;
        Imprimir_Cabecera(1);
        nSaltoLin:=DmPan.ImpresorafDetalle.Value;
        end;

      nSaltoLin:=nSaltoLin +  DmPan.ImpresoraSaltoFila.Value;
      Printer.Canvas.TextOut(DmPan.ImpresoraCProducto.Value , nSaltoLin, DmPan.LinAlbaProducto.Value);
      cNumText:=FormatFloat(',0.00',DmPan.LinAlbaCantidad.Value);
      Printer.Canvas.TextOut(DmPan.ImpresoraCdCantidad.Value   - Printer.Canvas.TextWidth(cNumText), nSaltoLin, cNumText);
        if DmPan.AlbaContado.Value = True then
        begin
        cNumText:=FormatFloat(',0.00',DmPan.LinAlbaPrecio.Value);
        Printer.Canvas.TextOut(DmPan.ImpresoraCdPrecio.Value - Printer.Canvas.TextWidth(cNumText), nSaltoLin, cNumText);
        cNumText:=FormatFloat(',0.00',DmPan.LinAlbaTotal.Value);
        Printer.Canvas.TextOut(DmPan.ImpresoraCdEuros.Value - Printer.Canvas.TextWidth(cNumText),nSaltoLin,cNumText );
        end;
      DmXX.LinAlba.Next;
      end;
Un Saludo.

Nota: Yo las coordenadas las guardo en una tabla, para así en un momento dado cambiar la ubicación de cualquiera de los objetos sin tener que tocar el código.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
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
Como configurar una impresora TM U220D ivaylo Impresión 1 16-01-2008 15:27:16
Imprimir ticket con una Epson TM U220D mtirado Impresión 2 13-01-2008 00:05:42
Imprimir Tickets con impresora Epson rcor Impresión 1 03-11-2006 14:35:22
Resetear una Impresora Epson FX-880 AGAG4 Impresión 4 04-03-2005 19:09:47
Fuente impresora epson Novás Impresión 1 26-06-2004 18:58:12


La franja horaria es GMT +2. Ahora son las 05:49:18.


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