1

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

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

4

1 回答 1

2

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

于 2012-09-15T00:02:29.427 回答