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 con printer imagen y texto con canvas (https://www.clubdelphi.com/foros/showthread.php?t=89933)

anubis 05-03-2016 07:48:10

imprimir con printer imagen y texto con canvas
 
Hola de nuevo,

Aqui preguntando de nuevo detalles.
Ya estuve viendo post por todos los lados, ejemplos etc, para poder imprimir en una impresora de tickets con logotipo incluido.

He conseguido imprimir un logotipo, y tambien un texto formateado, pero el problema que tengo es que si imprimo primero el logotipo, con enddoc, me hace un salto de lineas, luego imprimo el texto, y tambien, imagino que enddoc no se puede cambiar para que no haga los saltos de linea (si si se puede comentadlo, porque he buscado y no hay forma).
Asi que pense, en mi ignorancia de no entender muy bien los canvas, o bien no se pueden combinar varias cosas, pero lo hice.

Aqui esta el resultado, que no funciona por cierto, solo me imprime el texto pero la imagen inicial no.


Código Delphi [-]
procedure tform1.imprimelinea;
const
  margin_left = 0;
  margin_top=0;
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(0, 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;
  end;

end;

Lo que hago ahi es cargar los datos y luego se los paso al canvas, y finalmente imprimo.

alguna idea?

Por cierto lo de la imagen (como digo, si funciona en modulo aparte) lo saque de un ejemplo de lazarus y lo del texto lo saque de un post de esta magnifica pagina.

gracias amigos.

anubis 05-03-2016 09:07:13

Ya lo pude lograr, esta poniendo la misma posicion vertical al grafico y el texto, tan solo tuve que poner 70 al margin top.

Claro que todo esto lo probe sobre un panel para ver como quedaba ;).

Espero que le sirva a alguien.

saludos

la verdad que viendo como trabaja un canvas se pueden hacer muchas cosas que desconocia. Me toca seguir investigando ;).


La franja horaria es GMT +2. Ahora son las 23:42:35.

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