Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   imprimir tickets (https://www.clubdelphi.com/foros/showthread.php?t=86397)

anubis 02-08-2014 03:43:25

imprimir tickets
 
Buenas de nuevo,

He conseguido, gracias vosotros, foreros, imprimir en impresora de tickets cargando las impresoras asignando la impresora con printer.printers y luego con

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;

Pero tengo el problema que si imprimo una o dos lineas por ejemplo, me saca la tira completa.
Hay alguna forma de sacar el ticket justo?.

ecfisa 02-08-2014 21:14:35

Hola anubis.

Habria que hacer pruebas sobre la ticadora para estar seguro...

Así a simple vista, estas dibujando un rectángulo determinado por el total del alto de la página,
Código Delphi [-]
  R:= Rect(200,200,(Pagewidth - 200),(PageHeight - 200));
me parece que por ahí viene el asunto.

Yo intentaría ir sumando las sucesivas alturas de las líneas para ajustar el alto del rectángulo a ese valor; algo similar a:
Código Delphi [-]
...
var
  R: TRect;
  i: Integer;
  TotHeight: Integer;
begin
  with Printer do
  begin
    BeginDoc;
    TotHeight:= 0;
    for i := 0 to IMPRIMIR.Count -1 do
    begin
      TotHeight:= Canvas.TextHeight(IMPRIMIR.Strings[i]) * i;
      Canvas.TextOut(200, 200 + TotHeight, IMPRIMIR.Strings[i]);
      Inc(TotHeight, TotHeight);
    end;
    R:= Rect(200, 200, (Pagewidth - 200), (TotHeight - 200));
    Canvas.Brush.Style := bsClear;
    Canvas.Brush.Color := clBlack;
    Canvas.FrameRect(R);
    EndDoc;
  end;
  ...
No probé el código por que desconozco algunos datos, pero creo que en líneas generales tendría que funcionar.

Saludos :)

anubis 04-08-2014 16:26:43

Gracias por contestar ;).

Lo probaré y ya os cuento.

anubis 22-08-2014 06:03:19

Hola,

El codigo si funciona pero la primera vez, las siguientes en vez de las letras aparecen recuadros negros.

De momento lo estoy probando con una impresora virtual pdf y asi sale, con el otro codigo que puse no aparecia eso.
Le quite
Código Delphi [-]
Canvas.Brush.Style := bsClear;     Canvas.Brush.Color := clBlack;     Canvas.FrameRect(R);
y ya funciona bien. Ahora me queda probarlo en la impresora de tickets, pero la impresion, al menos en pdf, si funciona.

anubis 26-08-2014 23:25:36

hola de nuevo,

Ya probe la impresion, hasta le he quitado mas cosas y he dejado
Código Delphi [-]
 BeginDoc;
      TotHeight:= 0;
          for i := 0 to IMPRIMIR_ticket.Count -1 do
          begin
            TotHeight:= Canvas.TextHeight(IMPRIMIR_ticket.Strings[i]) * i;
            Canvas.TextOut(200, 100 + TotHeight, IMPRIMIR_ticket.Strings[i]);
            //Inc(TotHeight, TotHeight);
          end;
         // r:= Rect(200, 100, (Pagewidth - 200), (TotHeight - 100));
          //Canvas.Brush.Style := bsClear;
         // Canvas.Brush.Color := clBlack;
        // Canvas.FrameRect(R);
          EndDoc;
        end;

Imprimir imprime bien, pero, si imprimo 3 lineas me saca la tira completa, no se para despues de las 3 lineas.
Esto alguno sabe como se evita en una impresora de tickets que mande un LF (creo que se llama asi).

gracias


La franja horaria es GMT +2. Ahora son las 19:22:54.

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