我在应用程序中使用 TPrintDialog,在打印之前,我用对话框提示用户,用户更改她/他想要的任何设置,然后单击OK。
问题是,当应用程序关闭并重新启动时,页面大小与之前选择的(Letter)不同但设置为 A4 - 这是 Windows 问题吗?这发生在 Windows XP SP3(32 位)上,在 Windows 7 Ultimate(64 位)上发生相反的情况,默认情况下,页面大小“Letter”被选中,如果用户选择 A4 并关闭应用程序,重新启动,“Letter”被选中。
我在应用程序中使用 TPrintDialog,在打印之前,我用对话框提示用户,用户更改她/他想要的任何设置,然后单击OK。
问题是,当应用程序关闭并重新启动时,页面大小与之前选择的(Letter)不同但设置为 A4 - 这是 Windows 问题吗?这发生在 Windows XP SP3(32 位)上,在 Windows 7 Ultimate(64 位)上发生相反的情况,默认情况下,页面大小“Letter”被选中,如果用户选择 A4 并关闭应用程序,重新启动,“Letter”被选中。
操作系统不会为应用程序保留打印机设置,它只保留默认设置。同样,VCL 在这方面没有表现出任何努力。应用程序启动后第一次需要打印机时,它会检索该特定打印机的默认设置。因此,您需要实现保存和应用设置的方式。
这是一些简单的代码,可以在显示打印对话框之前将纸张类型设置为“Letter”:
var
Device: array[0..540] of Char;
Driver, Port: array[0..1] of Char;
DevMode: THandle;
PDevMode: PDeviceMode;
begin
Printer.GetPrinter(Device, Driver, Port, DevMode);
PDevMode := GlobalLock(DevMode);
PDevMode.dmPaperSize := DMPAPER_LETTER;
Printer.SetPrinter(Device, Driver, Port, DevMode);
GlobalUnlock(DevMode);
PrintDialog1.Execute();
end;
同样,您可以从 DeviceMode 结构中获取纸张类型或其他设置,并将它们保存到注册表 fi,同时关闭应用程序以供以后使用。