如何将自定义纸张设为默认纸张(200分)

  • 主题发起人 主题发起人 勇者
  • 开始时间 开始时间

勇者

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将默认打印机的纸张输出规格设置成我自定义纸张的名字
 
看看这个?
http://dev.csdn.net/article/58/58618.shtm
在WIN2000/XP下添加自定义纸张的Delphi源代码
 
FormInfo : TFormInfo1;
begin

Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then

raise Exception.Create('联接打印机失败!');

with FormInfodo

begin

Flags := FORM_USER;
pName := PChar(PaperName);
Size.cx := PaperWidth*100;
Size.cy := PaperLength*100;
ImageableArea.Left := 0;
ImageableArea.Top := 0;
ImageableArea.Right := PaperWidth*100;
ImageableArea.Bottom := PaperLength*100;
end;

//修改纸型,如果没有就新增
if not SetForm(hPrinter, PChar(PaperName), 1, @FormInfo) then

AddForm(hPrinter, 1, @FormInfo);

ClosePrinter(hPrinter);
 
添加的代码在大富翁的资料里已经有了,现在是怎么设为默认纸张
 
为什么不直接手动修改?
 
procedure printForm(const FormInt:integer);
var
Device:Array[0..cchDeviceName-1] of Char;
Driver:Array[0..(MAX_PATH-1)] of Char;
Port :Array[0..32] of Char;
hDMode:THandle;
pDMode:PDevMode;
begin
{设置打印机纸张为Custom}
if(Printer.Printers.Count <= 0) then
exit;{没有安装打印机}
Printer.GetPrinter(Device,Driver,Port,hDMode);
if hDMode=0 then
exit;
try
pDMode := GlobalLock(hDMode);
if pDMode = nil then
exit;
pDMode^.dmPaperSize := FormInt;
{设置打印机纸张变为自定义}
pDMode^.dmFields := pDMode^.dmFields
or DM_PAPERSIZE
or DM_PAPERLENGTH
or DM_PAPERWIDTH;
{对dmFields成员进行置位}
ResetDC(Printer.Handle, pDMode^);
{设置打印机设备环境句柄值}
finally
GlobalUnLock(hDMode);
end;
end;

本人没有测试过!
 
已试过,不起作用
 
提供一个目前我一直在使用的动态设置缺省纸张的自定义函数:
procedure SetDefaultPaperSize(PaperSize, PaperLength,
PaperWidth: Integer);
var
Device : array[0..cchDeviceName -1] of Char;
Driver : array[0..(MAX_PATH -1)] of Char;
Port : array[0..32]of Char;
hDMode : THandle;
pDMode : PDevMode;
begin
Printer.GetPrinter(Device,Driver,Port,hDMode);
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
pDMode^.dmPaperSize := PaperSize;
pDMode^.dmPaperLength := PaperLength;
pDMode^.dmPaperWidth := PaperWidth;
pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE;
pDMode^.dmFields :=
pDMode^.dmFields or DM_PAPERLENGTH;
pDMode^.dmFields :=
pDMode^.dmFields or DM_PAPERWIDTH;
ResetDC(Printer.Handle,pDMode^);
GlobalUnlock(hDMode);
end;
end;
end;

注意:在调用时通常将PaperSize赋值为256。至于为什么请参考WIN32 API
 
在调用时通常将PaperSize赋值为256。至于为什么请参考WIN32 API
0 or 256
表示 自定义。
 
to :akinosakurako,
兄台的那一段只适合在98里用,2000以上就不起作用了
 
后退
顶部