He estado usando el siguiente código que encontré en otro foro para inicializar
Printer:
procedure SetPaperSize (intAlto,intAncho : Integer);
{aqui se define el tamaño del papel}
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;
Y había satisfecho mis propósitos, pero cuando quise cambiar el tamaño de la hoja de papel por otra que no es carta y no está definida en las constantes de la
API de Windows, veo que aunque le ponga el tamaño que le ponga, no cambia nunca, siempre se queda en carta.
Así que quisiera saber si alguien ya tuvo este problema y cómo lo resolvió. O si alguien sabe cómo resolverlo.
El problema específicamente es hacer que el tamaño definido en
dmPaperLength y dmPaperWidth sea usado por Printer, ya que uso Printer para obtener ciertos valores como la mitad del ancho de página, etc... que son usados por
Printer.Canvas.
De antemano, Gracias.