Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Alinear texto para imprimir en canvas (https://www.clubdelphi.com/foros/showthread.php?t=86280)

Oscar Guzmán 13-07-2014 20:16:05

Alinear texto para imprimir en canvas
 
Hola a todos los compañeros del club

Recurro a Uds. en esta oportunidad, para preguntar si hay la posibilidad de alinear a la derecha un texto que se imprime de la forma
Código Delphi [-]
 
Printer.Canvas.TextOut(30,135,'Precio incluye I.V.A');
Edit3.Text:=FormatCurr('###,##0.00',Table1PVP.Value);
Printer.Canvas.TextOut(30,160,'BsF: '+edit3.Text);
No soy un especialista en imprimir con canvas y por eso es que me pregunto si un monto se puede alinear a la derecha en la impresión de una impresora de etiquetas. Los montos salen impresos bien, pero si unos montos son más pequeños o más grandes que otros entonces no los puedo alinear de derecha a izquierda, solo puedo alinear de izquierda a derecha pero los montos así no se ven bien.

Agradezco su ayuda

Actualimente salen así
1.200,00
350,00
3.400,00

O quisiera saber si hay otra forma de enviar esa información a la impresora zebra alineada a la derecha con otra instrucción de Delphi. He buscado bastante en muchos sitios y lo único que he encontrado es alineación con textout pero para stringgrid

ecfisa 14-07-2014 00:19:25

Hola Oscar.

Ejemplo:
Código Delphi [-]
...
uses Printers;

procedure TForm1.Button1Click(Sender: TObject);
  // Escribir número en posición alineado a la derecha
  procedure WriteAligned(Printer: TPrinter; const X, Y: Integer; const s: string);
  begin
    with Printer do
      Canvas.TextOut(X+(X-Canvas.TextWidth(s)) div 2, Y, s);
  end;

const
   VALUES: array[1..3] of Currency = (1200, 350, 3400);
var
  Prn: TPrinter;
  P: TPoint;
  i: Integer;
begin
  Prn:= TPrinter.Create;
  try
    Prn.BeginDoc;
    P.X:= 1800; // Posición horizontal deseada
    P.Y:= Printer.PageHeight div 50; // Tamaño linea
    Prn.Canvas.Font.Name:= 'Currier New'; // Nombre fuente
    Prn.Canvas.Font.Color:= clBlack;          // Color

    // Imprimir 
    for i:= 1 to 3 do
      WriteAligned(Prn, P.X, P.Y*i, FormatCurr('###,##0.00',VALUES[i]));

    Prn.EndDoc;
  finally
    Prn.Free;
  end;
end;

Saludos :)

Oscar Guzmán 16-07-2014 03:47:46

Hola Ecfisa, gracias por responder

Se ve excelente tu código, lo voy a poner en práctica y te comentaré los resultados por aquí, creo que va a funcionar.

gracias


La franja horaria es GMT +2. Ahora son las 14:42:21.

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