PDA

Ver la Versión Completa : Alinear texto para imprimir en canvas


Oscar Guzmán
13-07-2014, 20:16:05
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

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:

...
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