Delphi PrintDialog PaperSize正在重置

时间:2016-06-30 12:26:15

标签: delphi printing

为了简化我的问题 - 假设我安装了2台Windows打印机 - 一台用于A4,另一台用于A3(默认用于该打印机的纸张尺寸)。不同的司机。 当我打开预先选择A4打印机的tPrinterDialog并在组合框中(在对话框内)选择A3打印机,然后A3打印机在大多数情况下重置并将A4显示为纸张尺寸。

我该如何避免这种情况? 这个问题似乎至少出现在Delphi XE8,10.1

var
  lPrinterIndexOld  : integer;
  lPrinterIndexNew  : integer;
  lOK               : boolean ;
  lPrintDialog      : TPrintDialog;
begin
  lPrinterIndexOld := Printer.Printers.IndexOf( MyPrinterName );
  Printer.PrinterIndex := lPrinterIndexOld;

  lPrintDialog := TPrintDialog.Create( nil );
  Result := lPrintDialog.Execute;
  lPrintDialog.Free;
  lPrinterIndexNew := Printer.PrinterIndex;
end;

lPrinterIndexNew具有lPrinterIndexOld(例如A4)的属性 - 即使在Windows中将Printer [lPrinterIndexNew]定义为A3

编辑: 由于它似乎不够清楚,我试图更好地解释它: 根据用户想要在A4,A3,A2上打印的情况...每台打印机都支持A4。有些A3和大型PaperSize通常都是绘图仪。让我们假设我已经在Windows和应用程序中定义了几个打印机(A4,A3)(按名称,所以我可以找到printerindex并设置打印机以节省用户时间)。 如果用户在应用程序中预先选择了正确的打印机,那么它工作正常(理论上我可以跳过printerdialog)但是用户想要控制设置(而且也不浪费纸张)。 如果用户预先选择了错误的打印机并希望在printerdialog 中更改,则PaperSize和预选打印机的其他设置将被接管到新打印机。这意味着A3打印机在A4上突然打印(除非用户在打印机对话框中打印之前记得更改此设置)。 这会导致问题,用户希望必须更改此行为。现在我的问题是这是否可行(没有创建我自己的printerdialog)

有些用户甚至报告托盘已更换 - 这可能会导致更多问题。

EDIT2: tPrinterSetupDialog似乎是更好的方法。它并不完美,但表现得更好(为了我的目的)。

0 个答案:

没有答案