我试图让用户在我自己的打印设置对话框中为他们的打印机选择合适的纸张尺寸。有谁知道一个可行的解决方案 - 最好是跨平台,否则是 OSX。
如果我使用 TPageSetupDialog 然后在执行时它会在 Invalidpmobject 的 PASever 窗口中产生错误,尽管对话框显示但似乎不会影响当前打印机的纸张大小。似乎也没有任何属性可以查看用户选择的内容。
我需要在不实际打印的情况下设置纸张尺寸,因为用户需要能够首先使用新的纸张尺寸进行调整。
我试图让用户在我自己的打印设置对话框中为他们的打印机选择合适的纸张尺寸。有谁知道一个可行的解决方案 - 最好是跨平台,否则是 OSX。
如果我使用 TPageSetupDialog 然后在执行时它会在 Invalidpmobject 的 PASever 窗口中产生错误,尽管对话框显示但似乎不会影响当前打印机的纸张大小。似乎也没有任何属性可以查看用户选择的内容。
我需要在不实际打印的情况下设置纸张尺寸,因为用户需要能够首先使用新的纸张尺寸进行调整。
我终于找到了问题,所以这里是其他有问题的人的解决方案:
使用 TPageSetupDialog 但您必须在调用它之前为当前打印机设置有效的 pagewidth 和 pageheight 值 - 否则您会在 PAServer 窗口中报告错误并且打印机选择框将设置为“任何打印机”而不是当前打印机名称。
不幸的是,您不能直接从打印机页宽和分辨率得出纸张尺寸,因为它报告的是可打印区域而不是纸张尺寸。因此,每当用户选择另一台打印机时,我都会将默认设置为 A4。如果您想处理不支持 A4 的打印机,我想您可以将最接近的标准纸张尺寸设置为从 printer.pagewidth/printer.activeprinter.activedpi.x 计算的值。
还有一点需要注意的是,TPageSetupDialog 组件中的默认页面大小是错误的。将单位设置为 mm 并使用宽度 210000 和高度 297000(注意比默认值大 10 倍)作为大多数打印机应该支持的 A4 尺寸。