QuickReport 的 Custom PageSize问题(哥们,别让我失望) (50分)

  • 主题发起人 主题发起人 wlmmlw
  • 开始时间 开始时间
W

wlmmlw

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么我设置PageSize为Custom,Length=297, width=420
打印出来的纸张大小总是A4的!!!???
 
在设置里将打印机设置为custom size就行了
 
请详细说明,最好能有代码!!!
因为我试了很多种方法都不行!!!!
 
我也没有代码,我是在你的基础上,在外部设置打印机为custom size
 
好象不需要代码,设置一下就可以了啊,我一直这么用的。
 
up:
其他都可以就是custom size不行!!!!
 
var devs;pdevmode;
devsp:pointer;
devsize:integer;
printobject:thandle;
devname:string;
begin
printerobject:=printer.handle;
devname:=tprinterdev(printer.printers.object[printer.printer]).device;
devsize:=documentproperties(0,printerobject,pchar(devname),devs,devs,0);
devsp:=allocmem(devsize);
try
do
cumentproperties(0,printerobject,pchar(devname),devsp,nil,dm_out_buffer);
devs:=devsp;
devs^.dmfields:=dm_papersize ordmpaperlength or dm_paperwidth;
devs^.dmpapersize:=0;
devs^.dmpapaerlength:=//你要的长度
devs^.dmpaperwidth:=//
do
cumentproperties(0,printerobject,pchar(devname),devsp,devsp,dm_out_buffer or dm_in_buffer);
finally
freemem(devsp,devsize);
end;
end;
 
我现在要
custom size
length = 297;
width = 420;
请问如何设置?
 
我要的是Quick Report 里的 QuickReport的设置!!!
 
你用的是win2K吧。
 
是的!!!
 
打开控制面板,打开打印机,打开帮助,有关于自定义纸张设置的说明,
你可以看看。
 
用DevMode字段可以!
如设置纸的Width:
procedure TPrintForm.SetWidth(PaperWidth: longint);
var
ADevice, ADriver, APort: String;
ADeviceMode: THandle;
DevMode: PDeviceMode;
begin
SetLength(ADevice, 255);
SetLength(ADriver, 255);
SetLength(APort, 255);
{ If ADeviceMode is zero, a printer driver is not loaded. Therefore,
setting PrinterIndex forces the driver to load. }
if ADeviceMode = 0 then
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(PChar(ADevice), PChar(ADriver), PChar(APort), ADeviceMode);
end;

if ADeviceMode <> 0 then
begin
DevMode := GlobalLock(ADeviceMode);
try
DevMode^.dmFields := DevMode^.dmFields or DM_PAPERWIDTH;
//or DM_PAPERWIDTH;
DevMode^.dmPaperLength := PaperLength;
DevMode^.dmPaperWidth := PaperWidth;
///////////////////////设置纸张////////////////
finally
GlobalUnlock(ADeviceMode);
end;
end
else
raise Exception.Create('Could not set printer copies');
end;
 
我希望是在Quick Report中设置!
我用的系统是Win2000!!
 
QuickReport中就按你的设置就可。
关键是要在控制面板->打印机->设置打印机的属性中的纸张为自定义(大小好像无所谓)。
 
Win2000下我的打印机Epson LQ1600K并没有自定义大小这样的纸张类型!!
其实我要的就是 A3 Transverse 420 x 297 mm 的类型!!只是QuickReport
中没有提供,我就将它设成自定义的,大小噢 420 x 297 mm!预览一切正常,
就是在打印时,超出 A4 纸张大小的打印机就没打!
在控制面板的打印机的设置我都设成了 A3 Transverse 420 x 297 mm 但还不行。
请高手指点,不胜感激!!!
 
可以在打印机的服务器属性里面新增自定义纸张!
 
呵呵。这个问题很好解决。一般对于这种多张报表,大小不同的问题,如果要是考虑到
其他系统上安装有不同的打印机,一般取A3纸,通过调整左上角的位置来对齐纸张。
利用这种方法,编程简单,适用性好,从EPSON到HP,CANON的机器都适合。否则,有的
打印机在win2000下没有自定义类型,比较难处理。
 
不是都说过了吗,要手工先在操作系统中增加这样一个自定义大小,
当然,你也可以在程序中自己动态设定的,方法是在注册表中写入
那个自定义大小,然后在引用。
好像2000的打印接口跟以前有点不同了。
 
这个问题我遇到过,升级QR3.5即可解决。
 

Similar threads

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