Los valores que comentas los tengo guardados en una tabla llamada configuración, ello permite cambiar la ubicación de cualquier dato.
También le paso el tamaño de papel antes de comenzar a escribir.
Para el tamaño de papel utilizo la función del API:
Código Delphi
[-]
procedure SetPaperSize (intAlto,intAncho : Integer);
var
ADevice, ADriver, APort : array [0..255] of Char;
ADeviceMode : THandle;
DevMode : PDevMode;
begin
with Printer do
begin
GetPrinter (ADevice, ADriver, APort, ADeviceMode);
SetPrinter (ADevice, ADriver, APort, 0);
GetPrinter (ADevice, ADriver, APort, ADeviceMode);
DevMode := GlobalLock(ADeviceMode);
if not Assigned(DevMode) then
ShowMessage('Ha entrado en -> if not Assigned(DevMode) ...')
else
begin
with DevMode^ do
begin
dmPaperSize:= DMPAPER_User;
dmPaperLength := intAlto;
dmPaperWidth:= intAncho;
dmFields := dmFields or DM_PAPERSIZE or DM_PAPERLength or DM_PAPERWidth;
end;
GlobalUnLock(ADeviceMode);
SetPrinter(ADevice, ADriver, APort, ADeviceMode);
end;
end;
end;
Pero harías mejor en seguir la idea de Lepe, es lo que yo utilizo en la actualidad, como ves la opción del Canvas es bastante complicada de llevar a cabo.
La función
numero2Texto la cree yo.
Un Saludo.