我想用程序设置打印机的纸张类型,代码如下:
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
Printer.SetPrinter(ADevice, ADriver, APort, DeviceHandle);
GlobalUnLock(DeviceHandle);
end;
end; PrinterSetupDialog1.Execute; //验证一下设置是否成功了
end;我将打印方向设为了横向,但PrinterSetupDialog对话中显示的仍然是纵向,不知为什么,请问怎么才能使PrinterSetupDialog中的设置随程序设置的改变而改变呢?
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
Printer.SetPrinter(ADevice, ADriver, APort, DeviceHandle);
GlobalUnLock(DeviceHandle);
end;
end; PrinterSetupDialog1.Execute; //验证一下设置是否成功了
end;我将打印方向设为了横向,但PrinterSetupDialog对话中显示的仍然是纵向,不知为什么,请问怎么才能使PrinterSetupDialog中的设置随程序设置的改变而改变呢?
PrnDevice, PrnDriver, PrnPort: Array[0..255] Of Char;
PrnHandle: THandle;
PrnMode: PDeviceMode;
Begin
Printer.GetPrinter(PrnDevice, PrnDriver, PrnPort, PrnHandle);
If PrnHandle = 0 Then
Raise Exception.Create('无法获取系统打印机信息!')
Else
Begin
PrnMode:= GlobalLock(PrnHandle);
With PrnMode^ Do
Begin
//打印份数
dmFields:= dmFields Or dmCopies;
dmCopies:= 1; //打印方向
dmFields:= dmFields Or dmOrientation;
//dmOrientation:= DMORIENT_LANDSCAPE;
dmOrientation:= DMORIENT_PORTRAIT; //纸张大小
dmFields:= dmFields Or dmPaperSize;
//dmPaperSize:= 162;
dmPaperSize:= DMPAPER_USER; dmFields:= dmFields Or dmPaperWidth;
//dmPaperWidth:= 2100;
dmPaperWidth:= 1580; dmFields:= dmFields Or dmPaperLength;
//dmPaperLength:= 2970;
dmPaperLength:= 1018; dmFields:= dmFields Or PrnMode^.dmLogPixels;
dmLogPixels:= 300;
ResetDC(Printer.Handle, PrnMode^);
End;我的代码,你试试看。
我这边运行没问题。
你加上了么?