Las coordenadasson desde lo márgenes superior e izquierdo del ticket, cuando llegas al final del ticket:
Printer.Canvas.NewPage;
así saltas a la siguiente página.
y las coordenadas vuelve a comenzar de nuevo por el principio.
Aquí te pego un fragmento de código que yo utilizo y funciona correctamente.
Código Delphi
[-] While Not DmXX.LinAlba.Eof do
begin
nLin:=nLin + 1;
if nLin > DmXX.ImpresoraLineasDetalle.Value then
begin
Printer.NewPage;
nLin:=1;
Imprimir_Cabecera(1);
nSaltoLin:=DmPan.ImpresorafDetalle.Value;
end;
nSaltoLin:=nSaltoLin + DmPan.ImpresoraSaltoFila.Value;
Printer.Canvas.TextOut(DmPan.ImpresoraCProducto.Value , nSaltoLin, DmPan.LinAlbaProducto.Value);
cNumText:=FormatFloat(',0.00',DmPan.LinAlbaCantidad.Value);
Printer.Canvas.TextOut(DmPan.ImpresoraCdCantidad.Value - Printer.Canvas.TextWidth(cNumText), nSaltoLin, cNumText);
if DmPan.AlbaContado.Value = True then
begin
cNumText:=FormatFloat(',0.00',DmPan.LinAlbaPrecio.Value);
Printer.Canvas.TextOut(DmPan.ImpresoraCdPrecio.Value - Printer.Canvas.TextWidth(cNumText), nSaltoLin, cNumText);
cNumText:=FormatFloat(',0.00',DmPan.LinAlbaTotal.Value);
Printer.Canvas.TextOut(DmPan.ImpresoraCdEuros.Value - Printer.Canvas.TextWidth(cNumText),nSaltoLin,cNumText );
end;
DmXX.LinAlba.Next;
end;
Un Saludo.
Nota: Yo las coordenadas las guardo en una tabla, para así en un momento dado cambiar la ubicación de cualquiera de los objetos sin tener que tocar el código.