永久修改打印机的纸张类型为自定义型(100分)

  • 主题发起人 主题发起人 Tome200
  • 开始时间 开始时间
T

Tome200

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了下面的代码,目的是修改打印机的纸张类型为自定义型.
可是程序运行后,打开打印机的属性却发现纸张还是没有变。
但是,我们有个同事却已经实现了永久修改打印纸张的类型与大小。
可惜现他现在不在这儿。
请问哪位大侠能帮我实现永久实现修改打印的纸张类型?
永久:指关闭该程序后打印机的纸张为修改后的新纸张类型。

procedure TForm1.Button2Click(Sender: TObject);
var
Device, Drive, Port:array[0..255] of char;
TDevMode: THandle;
PDevMode: PDeviceMode;
begin
Printer.PrinterIndex:= Printer.PrinterIndex;
Printer.GetPrinter(Device, Drive, Port, TDevMode);
PDevMode:= GlobalLock(TDevMode);
PDevMode^.dmFields:= DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH;
PDevMode^.dmPaperSize:=256;
PDevMode^.dmPaperWidth:= 1000;
PDevMode^.dmPaperLength:= 1000;
ResetDC(Printer.Handle, PDevMode^);
GlobalUnLock(TDevMode);
end;
 
改系统。
 
个人认为不要永久性修改,而是程序每次自动设置
这样不会影响其它程序运行
 
就是,只你的程序打印时改为自定义纸张就行了。
 
的确没有必要永久修改,下面这个函数可以在程序运行时修改打印纸张类型为自定义:
function SetPage: Boolean;
var
DeviceHandle:THandle;
PDMode:PDeviceMode;
ADevice,ADriver,APort:array[0..255] of char;
begin
Printer.GetPrinter(ADevice,ADriver,APort,DeviceHandle);
if DeviceHandle=0 then
begin
MessageBox(Application.Handle,'无法初始化打印机','提示信息',MB_OK+MB_ICONWARNING);
Result:=False;
exit;
end;
try
PDMode:=GlobalLock(DeviceHandle);
with PDMode^do
begin
dmFields:=dmFields or DM_PAPERSIZE ;
dmPaperSIZE:=DMPAPER_USER;
dmFields:=dmFields or DM_PAPERWIDTH ;
dmPaperWidth:=1000;
dmFields:=dmFields or DM_PAPERLENGTH ;
dmPaperLength:=1000;
end;
finally
GlobalUnLock(DeviceHandle);
end;
Result:=True;
end;
 
我也遇到过,最后是在打印机文件夹里设置打印机属性的纸张属性就可以了
好象在DELPHI里用预览里的设置有时后是不行的
 
问题是在win2000下打印机属性里面没有自定义纸张属性的地方。
上面的代码好像在2000下无效。
 
如果只是为了解决报表控件的BUG,完全可以下载好的控件
http://delphi.mychangshu.com/dispdoc.asp?id=579
 
关键是客户要求在预览时要能看到纸张修改的效果。
我现在手里有一份永久修改的EXE程序,但每次都要调用并且也为程序的发布带来一些不便。
如有那位大侠有高见,可全取此分!
 
我的做法是在report裡面設置紙張為自定義,並將打印機屬性里的紙張自定義大小設成
程式里的一樣或稍大一點(小了就打不出來了),然後打印機的默認紙張還可以設回原來的值.
這樣就OK了
例如 中一刀的自定義大小為 215.9*139.7
[:)]
 
强烈关注
 
2000下是可以设置自定义纸张的,查一下windows帮助就知道啦.
我觉得还不如改注册表呢.尤其在2000下,改注册表是最方便的了.
 
改该注册表,怎么改,关注
 
2000瞎增加自定义纸张:
打开打印机文件夹,选择“服务器属性”,插件纸张!
 
有位老兄说"问题是在win2000下打印机属性里面没有自定义纸张属性的地方。
上面的代码好像在2000下无效。"?????2000下可以自定义打印纸:控制面板下打开“打印机文件夹,“文件”菜单下“服务器属性”打开,“创建新格式即可”
 
后退
顶部