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;
4条答案
按热度按时间mbjcgjjk1#
有关GetPrinter和SetPrinter,请参阅MSDN文档。您可以在 Delphi here和here中找到它们使用的基本示例。第二个示例包含用于设置纸张大小的特定代码,我在下面提供了这些代码。
字符串
5n0oy7gb2#
从您的评论到其他答案,似乎您想选择纸张类型(A4、法律的等)-对吗?
This page声明要选择纸张类型,您需要使用
Printer.GetPrinter
函数获取打印机的设备句柄,然后使用GlobalLock
获取可以访问的指针,转换为PDeviceMode。然后指针指向的TDeviceMode
的PaperSize
成员可以是A4,法律的等。这一切都是刚刚出现在通过谷歌。Scroll to 'Printer Properties' on this page为我得到这个信息。这个页面提到changing the tray太。
nwsw7zdq3#
这里有一个小块,有助于获得正确的字体大小:
字符串
n7taea2i4#
如果你只是想改变边距,这很容易,但取决于你如何打印。
如果你是手动打印(使用
Printer.BeginDoc
等),那么你只需在打印机的画布上远离边缘绘制!如果你是使用TRichEdit
打印,你可以改变PageRect
属性。