如何更改windows默认打印机的纸张大小,和横向打印(100分)

  • 主题发起人 主题发起人 zsy_good
  • 开始时间 开始时间
Z

zsy_good

Unregistered / Unconfirmed
GUEST, unregistred user!
var
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port : array[0..255] of char;
hDMode : THandle;
PDMode : PDEVMODE;
begin
result := E_Size;
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(Device, Driver, Port, hDMode);
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then

begin
{Set to legal}
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
pDMode^.dmPaperSize := DMPAPER_LEGAL;
{Set to custom size}
pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE or
DM_PAPERWIDTH or
DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := Width {SomeValueInTenthsOfAMillimeter};
pDMode^.dmPaperLength := Height {SomeValueInTenthsOfAMillimeter};
{Set the bin to use}
pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
pDMode^.dmDefaultSource := DMBIN_MANUAL;
Printer.SetPrinter (Device,Driver,port,hDMode);
GlobalUnlock(hDMode);
end;
end;
Printer.PrinterIndex := Printer.PrinterIndex;

这些函数全部有问题。
只在本程序有用。我把这些函数放到Dll,里面在Exe里面调用就有问题。
如果在Dll里面直接打印,就可成功,所以我想直接更改默认打印机的属性。
印象所有程序都可以。
 
在dll中和exe中的Printer不是一个的,你设置了dll中的,在exe中可能就不行了,建议把函数带上参数APrinter,用来设置。但必须保证编译dll的delphi版本和exe(调用者)的版本必须一致(差一点都不行,因为参数是对象)。
 
接受答案了.
 

Similar threads

S
回复
0
查看
688
SUNSTONE的Delphi笔记
S
S
回复
0
查看
683
SUNSTONE的Delphi笔记
S
I
回复
0
查看
844
import
I
I
回复
0
查看
651
import
I
后退
顶部