delphi 打印机打印尺寸

0h4hbjxa  于 11个月前  发布在  其他
关注(0)|答案(4)|浏览(238)

如何在不显示对话框的情况下通过代码设置打印尺寸(宽度和高度)?

mbjcgjjk

mbjcgjjk1#

有关GetPrinterSetPrinter,请参阅MSDN文档。您可以在 Delphi herehere中找到它们使用的基本示例。第二个示例包含用于设置纸张大小的特定代码,我在下面提供了这些代码。

procedure SetPrinterSettings(FPrinter: TPrinter);
var
  FDevice: PChar;
  FDriver: PChar;
  FPort: PChar;
  DeviceMode: THandle;
  DevMode: PDeviceMode;
begin
  {to get a current printer settings}
  FPrinter.GetPrinter(FDevice, FDriver, FPort, DeviceMode);
  {lock a printer device}
  DevMode := GlobalLock(DeviceMode);

  {set a paper size as A4-Transverse}
  if ((DevMode^.dmFields and DM_PAPERSIZE) = DM_PAPERSIZE) then
  begin
    DevMode^.dmFields := DevMode^.dmFields or DM_PAPERSIZE;
    DevMode^.dmPaperSize := DMPAPER_A4_TRANSVERSE;
  end;

  {set a paper source as Tractor bin}
  if  ((DevMode^.dmFields and DM_DEFAULTSOURCE) = DM_DEFAULTSOURCE) then
  begin
    DevMode^.dmFields := DevMode^.dmFields or DM_DEFAULTSOURCE;
    DevMode^.dmDefaultSource := DMBIN_TRACTOR;
  end;

  {set a Landscape orientation}
  if  ((DevMode^.dmFields and DM_ORIENTATION) = DM_ORIENTATION) then
  begin
    DevMode^.dmFields := DevMode^.dmFields or DM_ORIENTATION;
    DevMode^.dmOrientation := DMORIENT_LANDSCAPE;
  end;

  {set a printer settings}
  FPrinter.SetPrinter(FDevice, FDriver, FPort, DeviceMode);

  {unlock a device}
  GlobalUnlock(DeviceMode);
end;

字符串

5n0oy7gb

5n0oy7gb2#

从您的评论到其他答案,似乎您想选择纸张类型(A4、法律的等)-对吗?
This page声明要选择纸张类型,您需要使用Printer.GetPrinter函数获取打印机的设备句柄,然后使用GlobalLock获取可以访问的指针,转换为PDeviceMode。然后指针指向的TDeviceModePaperSize成员可以是A4,法律的等。
这一切都是刚刚出现在通过谷歌。Scroll to 'Printer Properties' on this page为我得到这个信息。这个页面提到changing the tray太。

nwsw7zdq

nwsw7zdq3#

这里有一个小块,有助于获得正确的字体大小:

Printer.Canvas.Font.PixelsPerInch:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSY);

字符串

n7taea2i

n7taea2i4#

如果你只是想改变边距,这很容易,但取决于你如何打印。
如果你是手动打印(使用Printer.BeginDoc等),那么你只需在打印机的画布上远离边缘绘制!如果你是使用TRichEdit打印,你可以改变PageRect属性。

相关问题