【问题标题】:How to solve TPrintDialog not saving settings?如何解决 TPrintDialog 不保存设置?
【发布时间】:2012-09-14 21:44:12
【问题描述】:

我在应用程序中使用 TPrintDialog,在打印之前,我用对话框提示用户,用户更改她/他想要的任何设置,然后单击 OK

问题是,当应用程序关闭并重新启动时,页面大小与之前选择的(Letter)不同但设置为A4 - 这是Windows问题吗?这发生在 Windows XP SP3(32 位)上,在 Windows 7 Ultimate(64 位)上发生相反的情况,默认情况下,页面大小“Letter”被选中,如果用户选择 A4 并关闭应用程序,重新启动,“Letter”被选中。

【问题讨论】:

  • 就 Windows 而言,唯一应该保留的设置是打印机默认设置。您需要设计您的机制来保存和应用设置到打印机。见:stackoverflow.com/questions/1651107/… 另见:stackoverflow.com/questions/1602068/…
  • @SertacAkyuz 谢谢你,我正在看关于 torry 的例子,我希望它有效(:你可以发表你的评论作为答案,我会加上它,因为它很有价值,如果 torry 例子有效,我会接受的。
  • @SertacAkyuz that doesn't work ):我确定超过 90% 的情况下,将使用 Letter,因此,在调用对话框之前,我将其设置为 Letter,稍后将对此进行调查...

标签: windows delphi delphi-2010


【解决方案1】:

操作系统不会为应用程序保留打印机设置,它只保留默认设置。同样,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。同时关闭应用程序以供以后使用。

【讨论】:

  • +1 获得酷炫方便的代码。顺便说一句,我碰到了这个链接(efg2.com/Lab/Library/Delphi/Printing/index.html)。我认为值得一提。
  • +1 谢谢,这正是我正在做的,我给这个问题更多的时间给其他人时间来回答......
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 2011-05-12
  • 2011-06-01
  • 2012-07-03
相关资源
最近更新 更多