Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-10-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
imprimir ticket con logo y abrir cajon

Hola amigos,

No sabia si esta pregunta debia de venir en este subforo o bien en impresion .

Estoy intentando imprimir un ticket en una impresora ecs, con su logo y el ticket, y posteriormente abrir el cajon, pero este ultimo no abre.
Ya estuve dando vueltas por el subforo de impresion, pero no encontre nada que me sirviera asi que pongo la procedure donde hago todo el asunto a ver si hay algo que estoy haciendo mal.

Código Delphi [-]
procedure tfventas.imprimelinea;
const
  margin_left = 1;
  margin_top=70;
var
 i: Integer;
 MiMapadeBits : TBitMap;
begin
  MiMapadeBits := TBitMap.Create;
  { Creamos el objeto MiMapadeBits }
  MiMapadeBits.Width := PAGE.Width;   { Definimos su anchura }
  MiMapadeBits.Height := page.Height; { Definimos su altura }
  page.BorderStyle:=bsNone; { Definimos el estilo del borde a ninguno }
  page.PaintTo(MIMAPADEBITS.Canvas, 0, 0);
  page.BorderStyle:=bsSingle;


  with printer do
  try
    BeginDoc;
    Canvas.Font.Name := 'COURIER NEW';
    CANVAS.FONT.Style:=[FSbOLD];
    Canvas.Font.Size := 6;
    Canvas.Font.Color := clBlack;

     Canvas.CopyRect(Classes.Rect(1, 0, 365, 60),
      MiMapadeBits.Canvas, Classes.Rect(0, 0, MIMAPADEBITS.Width, mIMAPADEBITS.Height));

    for i := 0 to IMPRIMIR_ticket.Count - 1 do
     begin
    //   page.Height:=margin_top+ i*printer.Canvas.TextHeight(imprimir_ticket.Strings[i]);
    Canvas.TextOut(
      MARGIN_LEFT,
      MARGIN_TOP + i*printer.Canvas.TextHeight(imprimir_ticket.Strings[i]),
      imprimir_ticket.Strings[i]);

     end;
    canvas.TextOut(0,0,#27+#10+#13+#027+#112+#0+#100+#250+#10+#13);
   // canvas.Clear;
  finally
    EndDoc;

    mimapadebits.Free;
  end;

El ticket con logo si imprime, luego he dejado unos espacios para poder cortar el papel manualmente y finalmente me imprime " +p d" Lo pongo para que veais de donde viene y si se pueden combinar las dos cosas, porque en otro lado dice que tiene que imprimir como raw. Ando hecho un lio.

Gracias amigos.
Responder Con Cita
  #2  
Antiguo 23-10-2016
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 anubis Ver Mensaje
canvas.TextOut(0,0,#27+#10+#13+#027+#112+#0+#100+#250+#10+#13);
Es '27,112,0,25,250', quita el escape de antes, y los 10 y 13.
Responder Con Cita
  #3  
Antiguo 24-10-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias por contestar Casimiro Notevi

La verdad es que ya probe varias combinaciones, esta fue la ultima que deje.

Cita:
canvas.TextOut(0,0,#027+#112+#0+#100+#250+#10+#13);
Eso lo saque de la web de seoane, del programa printest y si me abria el cajon pero directamente con su programa.

voy a probar la que propones a ver si funciona .

Cita:
canvas.TextOut(0,0,#27+#112+#0+#25+#250);
Muchas gracias amigo, ya dire como fue .
Responder Con Cita
  #4  
Antiguo 25-10-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
No puedo editar , asi que tengo que responder de nuevo.

Ese codigo la verdad no hace nada, ni imprime nada . El cajon esta unido a la impresora por si sirve de algo.

Ya intente tambien meterlo como texto dentro de string.

Código Delphi [-]
imprimir_ticket.add(chr(27)+chr(112)+chr(0)+chr(25)+chr(250));

Ahi si me imprime una flecha y una "p"

No se si el canvas.out funciona unido al codigo que puse.

gracias de nuevo
Responder Con Cita
  #5  
Antiguo 25-10-2016
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
Pero el canvas es para pintar, ¿no?
Debes usar la opción de imprimir, es un comando más que se envía a la impresora y que esta lo redirige al cajón.
Responder Con Cita
  #6  
Antiguo 25-10-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
perdona mi ignorancia a estas alturas,

cual es el comando para imprimir,
en base a lo que puse en el primer post, si me imprime el logo y el texto del ticket, todo correcto, si le meto la linea acabando el for y añado los codigos de la impresora como texto.

ando muy perdido. Llevo algunas semanas intentando abrir el cajon.
Responder Con Cita
  #7  
Antiguo 25-10-2016
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
¿printer es un tprinter?
Antes de nada deberías verificar si el cajón funciona, que una vez me pasó algo similar con un cajón y resulta que estaba defectuoso y por eso no abría
Responder Con Cita
  #8  
Antiguo 26-10-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias de nuevo,

Funcionar si funciona porque de hecho, usando printtest de seoane si funciona sin problemas, por eso quise usar le mismo codigo.

Printer si es tprinter de la unit printers.pas

Por eso decia si se podia enviar codigo a la impresora como string dentro del mismo cuerpo
Código Delphi [-]
with printer do
begindoc
...
enddoc

porque la impresion del logo y de los datos del ticket si los imprime, solo me falta el detalle del cajon.

Estuve buscando en los foros a ver si encontraba algo apropiado, pero no he visto nada, .
Responder Con Cita
  #9  
Antiguo 26-10-2016
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
¿Has probado así?
Código Delphi [-]
printer.Canvas.TextOut(0,0,#27#112#0#25#250);
Responder Con Cita
  #10  
Antiguo 26-10-2016
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
¿Y así?
Código Delphi [-]
  Var
    cajon : Text;   
  Begin
    assignFile(cajon, 'com1');
    rewrite(cajon);  
    try
      write(cajon,#27#112#0#25#250);      
    finally
      Close(cajon);  
    end;
  end;
Responder Con Cita
  #11  
Antiguo 27-10-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Asi no funciona tampoco, lo que si funciona, pero por separado,

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   with Printer do
  begin
   // PRINTER.PrinterIndex := impresora;
   printer.PrinterIndex:=0;
    RawMode := True;
  BeginDoc;
     font.Name:='arial';
     font.Size:=6;

   // for i := 0 to IMPRIMIR_ticket.Count - 1 do
    begin
    //  printstring(imprimir_ticket.Strings[i]+lineending);
    end;
printstring(#27+#112+#0+#25+#250+lineending);
   (*  printstring(' '+lineending);
     printstring(' '+lineending);
     printstring(' '+lineending);
     printstring(' '+lineending);
     printstring(' '+lineending);*)
     enddoc;
end;
 end;
procedure tform1.PrintString(S: String);
var
  Written: Integer;
begin
  Printer.Write(S[1], Length(S), Written);
end;

Asi, con eso solo si funciona, si mezclo las dos cosas: la primera que puse en el post para imprimir el logo y ticket no funciona, me da error diciendo que printer esta en raw mode.

edito: ya combine los dos, y si me imprime y saca el cajon, lo unico malo que, como hay dos begindoc..enddoc, el segundo tarda en mandar el comando. Porque ademas, le puse en el primer bloque rawmode:=false.

sigo perdido, la idea era que saliera todo en el mismo bloque.

Última edición por anubis fecha: 27-10-2016 a las 02:36:52.
Responder Con Cita
  #12  
Antiguo 27-10-2016
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
¿Necesitas el rawmode=true?
¿Qué ocurre si lo dejas a false?
Responder Con Cita
  #13  
Antiguo 27-10-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Yo la verdad es que no tengo ni la más remota idea sobre como operar los cajones, pero si dices que de forma "separada" lograste andar, quizá sea lo mejor y más sano.
No descartaría que sea bastante probable de que no pueda mezclarse ambas cosas. En cierta forma, tiene sentido: una cosa es imprimir un ticket, y otra es que de forma indirecta por medio de la impresora se envíe la orden/comando al cajón. La impresora no puede atender las dos cosas a la vez. O imprime o abre el cajón.
La orden de apertura no es un documento más y no se guarda en la cola.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #14  
Antiguo 27-10-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Casimiro Notevi. Sobre el rawmode:=true para enviar codigos a la impresora debe de estar asi sino no funciona, al menos en la parte del codigo de programa que saque de los foros. Sino lo pongo o lo dejo en false, a la hora de enviar los codigos a la impresora, se queja la aplicacion y dice que debe estar en rawmode:=true.

Delphius. Si, son dos cosas diferentes segun estoy viendo. Por un lado logo y ticket y por el otro la apertura. El problema surge, cuando cierro un begindoc..enddoc y vuelvo a abrir begindoc..enddoc para abrir el cajon. La verdad es que se tarda y no debiera ser asi. Se que alguien debe de haber implementado algo mas rapido para sus programas.

Todavia no he dado con ello, pero vere que hago para resolver.

pense que con printer.texout se podian mandar codigos a la impresora, pero no hacen nada .

Gracias a los dos. Os dire si he resuelto algo. .
Responder Con Cita
  #15  
Antiguo 31-10-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Perfecto amigos. Gracias.

Deje las dos partes:

Código Delphi [-]
procedure tfventas.imprimelinea;
const
  margin_left = 1;
  margin_top=70;

var
 i: Integer;
 MiMapadeBits : TBitMap;

begin

  MiMapadeBits := TBitMap.Create;
  { Creamos el objeto MiMapadeBits }
  MiMapadeBits.Width := PAGE.Width;   { Definimos su anchura }
  MiMapadeBits.Height := page.Height; { Definimos su altura }
  page.BorderStyle:=bsNone; { Definimos el estilo del borde a ninguno }
  page.PaintTo(MIMAPADEBITS.Canvas, 0, 0);
  page.BorderStyle:=bsSingle;
   with printer do
  try
  rawmode:=false;
    BeginDoc;
    Canvas.Font.Name := 'COURIER NEW';
    CANVAS.FONT.Style:=[FSbOLD];
    Canvas.Font.Size := 6;
    Canvas.Font.Color := clBlack;
    Canvas.CopyRect(Classes.Rect(1, 0, 365, 60),
    MiMapadeBits.Canvas, Classes.Rect(0, 0, MIMAPADEBITS.Width, mIMAPADEBITS.Height));
    for i := 0 to IMPRIMIR_ticket.Count - 1 do
     begin
    Canvas.TextOut(
      MARGIN_LEFT,
      MARGIN_TOP + i*printer.Canvas.TextHeight(imprimir_ticket.Strings[i]),
      imprimir_ticket.Strings[i]);
     end;
  finally
    EndDoc;
    mimapadebits.Free;
 with Printer do
  begin
    PRINTER.PrinterIndex := 0;
    RawMode := True;
  BeginDoc;
       printstring(#27+#112+#0+#25+#250+lineending);  //ABRE CAJON
      EndDoc;
  end;           
   end;
end;

En el primer BeginDoc, imprime el logo y el ticket, y en el segundo ya me abre el cajon. No hay tiempo de espera, asi que es transparente para el usuario.

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
Impresora NCR 7197 imprimir logo dfarias Impresión 1 28-06-2013 21:18:26
Imprimir en Tiqueteadora y Abrir Cajon Monedero subzero PHP 0 21-10-2011 23:08:35
Abrir Cajon Portamonedas desde Oki raorre Impresión 0 25-06-2007 13:27:24
abrir cajon de dinero serial Citlalli API de Windows 13 13-12-2006 11:08:41
Abrir cajon portamonedas marcial Varios 1 06-10-2004 18:58:12


La franja horaria es GMT +2. Ahora son las 23:31:09.


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