如何在程序里控制打印纸张大小(A3,A4)和打印方向?不想打开设置窗口
---------------------------------------------------------------
Uses Printer;
.........
procedure TForm1.Button1Click(Sender: TObject);
var
ADevice, ADriver, APort: array[0..255] of Char;
DeviceHandle: THandle;
DevMode: PDeviceMode;
begin
//初始化打印机
Printer.GetPrinter(ADevice, ADriver, APort, DeviceHandle);
if DeviceHandle = 0 then
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(ADevice, ADriver, APort, DeviceHandle);
end;
if DeviceHandle = 0 then
Raise Exception.Create('不能初始化打印机!')
else
DevMode := GlobalLock(DeviceHandle);
if DeviceHandle <> 0 then
begin
with DevMode^ do
begin
dmFields := dmFields or DM_ORIENTATION;
//在下面这里设置打印方向
dmOrientation := DMORIENT_LANDSCAPE; //DMORIENT_PORTRAIT
dmPaperSize := DMPAPER_A3;
Printer.SetPrinter(ADevice, ADriver, APort, DeviceHandle);
GlobalUnLock(DeviceHandle);
end;
end;
PrinterSetupDialog1.Execute; //验证一下设置是否成功了
end;
*************
printer.pagewidth是只读属性
---------------------------------------------------------------
参考这个
var
hDMode: THandle;
PDMode: PDEVMODE;
Printer.GetPrinter(Device, Driver, Port, hDMode);
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
pDMode^.dmFields := DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := APaperWidth;
pDMode^.dmPaperLength := APaperHeight;
pDMode^.dmFields:=pDMode^.dmFields or DM_ORIENTATION;
pDMode^.DMORIENTATION:= Direct;
end;
end;
//打印机设置的纸张大小
---------------------------------------------------------------
在执行打印前调用以下函数:
procedure SetPaperSize(X, Y: Integer);
// 单位是0.1mm
// A4时 Printer.Pagewidth:=1440; A5时 Printer.Pagewidth:=1049;
// B5时 Printer.Pagewidth:=1290; 16K时 Printer.Pagewidth:=1035;
// lq1600宽行打印机这个值宽度最大为42cm左右, 长度大约2m。
//改变devicemode结构
var
Device: array[0..255] of char;
Driver: array[0..255] of char;
Port: array[0..255] of char;
hDMode: THandle;
PDMode: PDEVMODE;
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(Device, Driver, Port, hDMode);
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
if (x = 0) or (y = 0) then
begin
{Set to legal}
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
{pDMode^.dmPaperSize := DMPAPER_LEGAL; changed by wulianmin}
pDMode^.dmPaperSize := DMPAPER_FANFOLD_US;
end
else
begin
{Set to custom size}
pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE or
DM_PAPERWIDTH or
DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := x {SomeValueInTenthsOfAMillimeter};
pDMode^.dmPaperLength := y {SomeValueInTenthsOfAMillimeter};
end;
{设定纸张来源}
pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
pDMode^.dmDefaultSource := DMBIN_MANUAL;
GlobalUnlock(hDMode);
end;
end;
Printer.PrinterIndex := Printer.PrinterIndex;
//以下开始打印
Printer.BeginDoc;
Printer.Canvas.TextOut(100,100, 'Test 1');
Printer.EndDoc;
end;
分享到:
相关推荐
在Delphi中,如果要在一台PC电脑上同时控制多台打印机,并且各台打印的纸张大小不同,此函数非常有用。 如果要只定把数据打印在那一台打印机,不需要控制打印机端口,只需要使用打印机索引即可,默认打印机为第一台...
在delphi中控制打印机,自定义了纸张大小,打印小票之前退纸,打印小票之后退纸,实现了小票的连续打印 还附带了编程时所使用的控件
Delphi中使用Olecontainer打开Word文档后,并实现打印功能
delphi 实现打印预览和打印过程代码。
DELPHI 正确打印PDF文件,解决PDF文件打印顺序问题。好用请帮忙给个5星
【Delphi WEB打印服务】通过请求api,实现打印设计、打印预览、打印,即可做到本地和远程打印
精典源码delphi源码下载 远程控制.zip 精典源码delphi源码下载 远程控制.zip 精典源码delphi源码下载 远程控制.zip 精典源码delphi源码下载 远程控制.zip 精典源码delphi源码下载 远程控制.zip 精典源码delphi源码...
测试Delphi的批量打印功能,这个批量打印据说用着很顺手,可批量打印文件,同时你也可研究下,Delphi开发环境下,如何实现批量打印功能。相关代码: procedure TForm1.Button1Click(Sender: TObject); var i:...
在DELPHI中如何调用打印机打印图片的例子。
Delphi PrintText打印文本文件内
delphi自动调用打印机打印源码,经测试可以正常调用打印机打印文件,设置简单方便可以快速打印文件解决指定打印机问题。
delphi中,实现Fastreport二维码打印功能
Delphi中,如何获得文件大小
【Delphi WEB打印服务】通过请求api,实现打印设计、打印预览、打印,即可做到本地和远程打印.zip
使用Delphi自带组件控制小米手环2和蓝牙打印(示例和文档)
Delphi 中控制 Word,xml,dll 等操作
Delphi dxComponentPrinter控制代码。CXGrid输出报表设置、报表打印预览、报表打印。
Delphi设置打印纸大小的程序示例..rar
Delphi 设置打印纸张大小,手动设置打印纸的长度和宽度,自定义纸张。相关代码: procedure TForm1.SetPaperSize(cx, cy: Integer); var a,b,c: array[0..255]of char; bb: Cardinal; ee: PDEVMODE; ...