如何设置动态创建一个报表的纸张大小(200分)

  • 主题发起人 主题发起人 caocaocao
  • 开始时间 开始时间
C

caocaocao

Unregistered / Unconfirmed
GUEST, unregistred user!
我想通过dbgrid来打印报表,我准备用delphi自身的quickreport来实现,是动态创建
但是,我找不到正确设置纸张大小的方法,各位高手,请指点一二
 
试一下以下代码:
QuickRep1.Page.PageSize:=Custom;
//这行一定不能少
QuickRep1.Page.Length:=200;
//改变长度
QuickRep1.Page.Width:=150;
//改变宽度
 
用ReportBuilder吧!
 
QuickRep1.Page.PageSize:=Custom;
//这行一定不能少
QuickRep1.Page.Length:=recordcount*detailhigh+xx;
//改变长度
 
custom的纸张大小不是每种打印机都支持的!请问如何动态改变纸张类型?
 
引用此单元后qrprnTr
就可以直接设置了
QuickRep1.Page.PaperSize:=A3;
 
我有QR的源程序
 
procedure PaperSizeSet(iaWith,iaLength:Integer);
var
ADevice : array[0..255] of char;
ADriver : array[0..255] of char;
APort : array[0..255] of char;
hDevHandle : THandle;
PDevMode : PDeviceMode;
//A Pointer to a TDeviceMode structure
begin
Printer.PrinterIndex:=Printer.PrinterIndex;
// GetPrinter() 首先获得TPrinter的DeviceMode结构的句柄
Printer.GetPrinter(ADevice, ADriver, APort, hDevHandle);
//如果句柄为0,表示打印机没有装载
if hDevHandle = 0 then
begin
Printer.PrinterIndex:=Printer.PrinterIndex;
Printer.GetPrinter(ADevice, ADriver, APort, hDevHandle);
end;
//如果句柄还是为0,表示有错误发生。否则,就调用
if hDevHandle = 0 then
raise Exception.Create('不能初始化打印结构,请察看打印机是否已加载')
else
if hDevHandle<>0 then
begin
PDevMode:=GlobalLock(hDevHandle);//GlobalLock()获取TDeviceMode结构的指针
if PDevMode <> nil then
try
//Set to legal
PDevMode^.dmFields := PDevMode^.dmFields or dm_PaperSize;
PDevMode^.dmPaperSize := DMPAPER_LEGAL;
//Set to custom size //设置定制的大小
PDevMode^.dmFields := PDevMode^.dmFields or
DM_PAPERSIZE or
DM_PAPERWIDTH or
DM_PAPERLENGTH ;
PDevMode^.dmPaperSize :=DMPAPER_USER;
PDevMode^.dmPaperWidth :=iaWith;
//SomeValueIn Tenths Of A Millimeter;
PDevMode^.dmPaperLength :=iaLength;
//SomeValueInTenthsOfAMillimeter;
{ //Set the bin to use
PDevMode^.dmFields := PDevMode^.dmFields or DMBIN_MANUAL;
PDevMode^.dmDefaultSource := DMBIN_MANUAL;
}
finally
GlobalUnlock(hDevHandle);
end;
end
else
raise Exception.Create('不能设置打印纸张大小');
Printer.PrinterIndex := Printer.PrinterIndex;
end;

这样就行啦,它可以任意的设置纸张的大小拉,呵呵,我的嵌套打印全靠它的
 
这个办法一定行,我花了一天Debug出来的。
如下:
1.打开 /delphi5/quickrpt/QRPrntr.pas文件
2.查找 if Supported(dm_paperlength) then
注释掉它
3.查找 if Supported(dm_PaperWidth) then
注释掉它
注意:Delphi5默认安装是的LIB Path里不包含/delphi5/quickrpt的,请通过
工具-环境设置 来设定,或者把 /delphi5/quickrpt 里的文件拷贝到 /delphi5/lib
我用的是Qrt 3.0.7,不过在Qrt 3.0上也行。
这个问题不应该算是QRT的BUG,应该是打印机驱动的BUG。
 
强制结束,请自行验证!
 

Similar threads

D
回复
0
查看
909
DelphiTeacher的专栏
D
D
回复
0
查看
704
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部