windows - 如何解决 TPrintDialog 不保存设置?

标签 windows delphi delphi-2010

我在应用程序中使用 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/

相关文章:

python - 为什么 Nose 测试会在 Windows 8 上留下孤立的 PhantomJS 进程?

delphi - 正确的 Delphi 编译器切换为停止在用户的代码中,而不是我的组件的代码中

delphi - TDirectory.GetDirectoryRoot 无法正确处理 Max_Path 字符的路径

windows - 如何在 Windows 8 Metro 应用程序中使用 native pdf 阅读器?

Windows批处理文件起始目录时 'run as admin'

windows - 什么可执行文件启动了我的可执行文件?

xml - 如何创建xmlns :xsi and xsd information in an XML document

xml - Delphi 2010 中的 C# 样式 XML 注释

delphi - 有人将 Turbopower 的 Onguard 升级到 Delphi-2010

delphi - 如何使用delphi 2010 rtti设置数组长度