我想在程序中把cr3240的默认纸张A4改为US SF(或其它纸张),请教如何实现?(100分)

type
PDevMode=^TDevMode;
TPrinterDev = class
Driver: string;
Device: string;
Port: string;
end;


implimentation

procedure TForm1.SetPrinter;
var
Devs: PDevMode;
DevsP: Pointer;
DevSize: integer;
PrinterObject: THandle;
DevName: string;
begin

PrinterObject:= Printer.Handle;
DevName:= TPrinterDev(Printer.Printers.Objects[Printer.PrinterIndex]).Device;
DevSize:=DocumentProperties(0,PrinterObject,PChar(DevName),Devs,Devs,0);
DevsP:=AllocMem(DevSize);
try
do
cumentProperties(0,PrinterObject,Pchar(DevName),nil,DevsP,DM_OUT_BUFFER);
Devs:=DevsP;
Devs^.dmFields:=DM_PAPERSIZE;
Devs^.dmPaperSize:=DMPAPER_FANFOLD_US;

// if use USER_DEFINE paper then

// this line change to
// Devs^.dmFields:= DM_PAPERSIZE or DM_PAPERLENGTH or DM_PAPERWIDTH;
// Devs^.dmPaperSize:=0;
// Devs^.dmPaperLength:= ur defined paper length value;
// Devs^.dmPaperWidth:= ur defined paper width value;
do
cumentProperties(0,PrinterObject,Pchar(DevName),DevsP,DevsP,DM_OUT_BUFFER or DM_IN_BUFFER);
finally
FreeMem(DevsP,DevSize);
end;

end;


end.
 
更正一下:
try
do
cumentProperties(0,PrinterObject,Pchar(DevName),DevsP,nil,DM_OUT_BUFFER);
 
如果要永久改变打印机纸张类型,也就是说当程序退出后仍保持更改的纸张类型,
应如何做?
 
我给的方法不是永久的?(eYes糊涂了)
如果不是, 试试下面的:
方法一. 控制面版->打印机->属性...
如果要程序修改那么:
方法二. 直接修改registry
打开你要修改的打印机的key(在HKEY_LOCAL_MACHINE/System/CurrentControlSet/control/Print/Printers/打印机名/)
把上例中的DevMode结构添入Default DevMode键值中
 
如自定义正确吗?
Devs^.dmPaperSize:=0;
Devs^.dmPaperLength:=4100;
Devs^.dmPaperWidth:=15000;
 
请教eYes:
在连续打纸时如何处理你所说的跨缝的那一行?急!
 
to pcw:
定义错误。pagewidth和pagelength的值反了。
自定义纸张(pagesize=0) 宽度和高度最大只能达到打印机所能允许的值,lq1600宽行
打印机这个值宽度最大为42cm左右, 长度大约2m。

处理跨页缝有个简单的办法,即想办法让每行都不跨缝。比如页长设为行的高度,每
打一行换一页(说笑说笑,自定义最小页长得近9cm), 不过就是这个思路。不断调整
页长使每页正好打下某些行,不出现跨页缝即可。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部