我在应用程序中使用 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 结构中获取纸张类型或其他设置,并将它们保存到注册表 f.i.同时关闭应用程序供以后使用。
关于windows - 如何解决 TPrintDialog 不保存设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12432378/