Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Ejemplo de impresión en el canvas de la impresora (https://www.clubdelphi.com/foros/showthread.php?t=32412)

Manuel 05-06-2006 20:32:22

Ejemplo de impresión en el canvas de la impresora
 
Hola amigos del foro, talvez la pregunta que le hago ahora se la han hecho miles de veces pero he buscado en el foro y no he encontrado lo que busco, me gustaría que me indicaran un ejempo como puedo imprimir en el canvas de la impresora no lo he hecho nunca y ahora tengo que ocuparlo, gracias amigos.

seoane 05-06-2006 20:45:20

Un ejemplo secillo:

Código Delphi [-]
uses Printers;

begin
  Printer.BeginDoc;
  try
    Printer.Canvas.TextOut(100,100,'Hola mundo');
    Printer.EndDoc;
  except
    Printer.Abort;
  end;
end;

Algo un poco mas complicado, usando medidas reales:
Código Delphi [-]
uses Printers;

function mmToPixelsX(X: Real): Integer;
var
  PixelsPerInchX: Integer;
  OffsetX: Integer;
begin
  PixelsPerInchX := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
  OffsetX := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
  Result:= Round((X / 25.4) * PixelsPerInchX) - OffsetX;
end;

function mmToPixelsY(Y: Real): Integer;
var
  PixelsPerInchY: Integer;
  OffsetY: Integer;
begin
  PixelsPerInchY := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
  OffsetY := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
  Result:= Round((Y / 25.4) * PixelsPerInchY) - OffsetY;
end;

var
  x1, y1, x2, y2: Integer;
begin
  Printer.BeginDoc;
  try
    x1:= mmToPixelsX(30);
    x2:= mmToPixelsX(100);
    y1:= mmToPixelsY(30);
    y2:= mmToPixelsY(100);
    // Dibujamos un circulo de 7 cm
    Printer.Canvas.Ellipse(x1,y1,x2,y2);
    Printer.EndDoc;
  except
    Printer.Abort;
  end;
end;

Y a partir de esto solo hay que utilizar cualquier otro metodo de dibujo sobre el canvas que te apetezca, el unico que no funciona es FloodFill pero el resto creo que funciona bien.

Por ultimo aqui te dejo otro, este dibuja una bonita espiral:

Código Delphi [-]
procedure Espiral(Canvas: TCanvas; X,Y,Ancho: Integer; V: Real);
var
  i: integer;
begin
  Ancho:= Ancho * 16;
  V:= (2*V*pi)/Ancho;
  Canvas.MoveTo(x,y);
  for i:= 1 to Ancho do
  begin
    Canvas.LineTo(x + (Round(i*cos(V*i))) shr 4,y + (Round(i*sin(V*i)) shr 4));
  end;
end;

var
  x, y: Integer;
begin
  Printer.BeginDoc;
  try
    x:= Printer.PageWidth div 2;
    y:= Printer.PageHeight div 2;
    Espiral(Printer.Canvas,x,y,x,100);
    Printer.EndDoc;
  except
    Printer.Abort;
  end;
end;


La franja horaria es GMT +2. Ahora son las 02:24:56.

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