在 delphi6 中怎么使 QuickReport 控件在 preview 时不能打印。(120分)(120分)

  • 主题发起人 主题发起人 qinqijun
  • 开始时间 开始时间
Q

qinqijun

Unregistered / Unconfirmed
GUEST, unregistred user!
一个工程,报表使用QuickReport控件,有的模块要求预览时可以打印,有的模块要求预览时不能打印。
在不自己做打印预览窗口的情况下怎么实现?
 
自定义一个预览窗口
可以打印时给一个打印按钮
不可以打印就什么也不显示打印按钮
 
很简单呀,在设置一个全局变量为整型,在BeforePrint里面自加1
同时在BeforePrint里面判断该数值是否>1,如果>1,则为打印PrintReport:=False。
否则为预览,允许预览。
 
[:(!]
dhl2001。请问怎么自定义一个预览窗口?
 
>>在BeforePrint里面判断该数值是否>1,如果>1,则为打印PrintReport:=False。
如果=1,则为预览,需要设置PrintReport:=True;
var
runCount: Integer;
procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
runCount := runCount + 1;
if runCount > 1 then
PrintReport := False
else
PrintReport := True;
end;
 
yzhshi。
我在BeforePrint事件里把PrintReport设为False后,预览都没有东西出来。
那个预览框黑黑的,是不是设置错了报表的某些属性?
还有,为什么要设置一个全局变量自加一?这个和预览有什么关系吗?
请指点。
 
在新建Form中放QRPreview构件(在QuickReport构栏后面可以找到),
在原来的QuickRep的OnPreview中加:
Form.QRPreview.QRPinter := QuickRep.QRPrinter;
QRPreview.zoom := xx(xx预览比例)
QRPreview.pagenumber := xx(预览第几页)
QRPreview.QRPinter.Print;(打印)
QRPreview.QRPinter.PrintSetup(打印设置)
页边距设置:
QuickRep.Page.TopMargin
QuickRep.Page.BottonMargin
QuickRep.Page.LeftMargin
QuickRep.Page.RightMargin
纸张设置:
QuickRep.Page.PageSize
 
yzhshi,在下的程序段为:
var
QRListForm: TQRListForm;
aa : integer;
procedure TQRListForm.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
aa := aa + 1;
if aa > 1 then
PrintReport:=False;
end;
------------------------------------------------------------------------
在另一窗口有调用语句:
QRListForm.QuickRep1.Preview;
------------------------------------------------------------------------
在第一次调用时可预览但也可打印,第二次调用时就什么也没有了?
 
hbezwwl,我指的是不用新建预览窗口!“在不自己做打印预览窗口的情况下怎么实现?”
 
有谁知道的?我很急的!
 
不能预览的窗体可以暂时删掉QuickRep然后再重新加上,在加上时,首先要在程序
编辑状态下看能不能预览,如果能预览则程序运行也可预览。
 
Yujx,这个我也知道呀。不过我要的是能够预览不能打印的效果!
由于报表实在是太多,所以不可能全部都删掉然后再重新加上的呀。
 
以下代码可以控制预览窗口及其上的控件:
var
prevFrm : TForm;
tBar, tBut, tPrev : TComponent;
..
..
prevfrm := TForm( repform.QuickRep1.QRPrinter.Client.parent);//获取预览窗口
for j := 0 to prevfrm.controlcount-1do
begin
tBar := prevfrm.controls[ j ];
if tBar is TToolbar then
begin
// Vanish the toolbar !!
// TToolbar(tBar).visible := false;
// break;
// if vanishing 这几句可以使工具栏隐去
for k := 0 to TToolbar(tBar).controlcount-1do
begin
tBut := TToolbar(tBar).controls[ k ];
if tBut is TToolbutton then
// 这几句可以控制按钮的显隐,只需在此测试按钮标题,即可对具体按钮加以控制
TToolbutton(tBut).enabled := false;
end;
end;
end;
 
xiao_q654321,你好。
你给的程序在DELPHI6上编译不通过。你有DELPHI6 上调试过吗?
 
前述有问题。
应在程序中放置一Timer,将该段程序放在Timer1Timer程序段中:
Report:TCustomQuickRep;
procedure TForm1.Button1Click(Sender:TObject);
begin
Timer1.Enabled:=True;
Report.Preview;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
prevFrm : TForm;
tBar, tBut, tPrev : TComponent;
j,k:Integer;
begin
if not assigned(Report.QRPrinter) then
exit;//需要在此判断窗口是否已分配
timer1.enabled := false;//关闭定时器
prevfrm := TForm(Report.QRPrinter.Client.Parent);//获取预览窗口
for j := 0 to prevfrm.ControlCount -1do
begin
tBar := prevfrm.controls[ j ];
if tBar is TToolbar then
begin
// Vanish the toolbar !!
// TToolbar(tBar).visible := false;
// break;
// if vanishing 这几句可以使工具栏隐去
for k := 0 to TToolbar(tBar).controlcount-1do
begin
tBut := TToolbar(tBar).controls[ k ];
if tBut is TToolbutton then
// 这几句可以控制按钮的显隐,只需在此测试按钮名字,即可对具体按钮加以控制
TToolbutton(tBut).enabled := false;
end;
end;
end;
end;
 
在DELPHI6我跟本编译不过你给的程序。是不是我有什么忽略的地方?
 
此問題我有辦法,不過現在要走人了,晚上吧!等到晚上再看到這個貼時兄弟一定幫你解決!!!
 
留下你的E-Mail吧!晚上一定寄來,且一定能解決你的問題!
剛試了,ok了
 
>>在另一窗口有调用语句:
>> QRListForm.QuickRep1.Preview;
>>------------------------------------------------------------------------
>>在第一次调用时可预览但也可打印,第二次调用时就什么也没有了?
不会存在这个问题吧?是的,在打印的时候,会出现那个进度条,但是并不会真正打印。
所以不存在第一次可预览但也可打印的问题。
至于出现第二次调用什么都没有了的问题,是你需要在 QRListForm.QuickRep1.Preview;前面
初始化一下aa ,因为你的报表QuickReport窗体不是动态创建的。
 
to qinqijun:
sorry,我用的是D5。不过这些程序似乎不应该随着D版本升高而错误,
因为这种用法是从Quickreport的官方网站上找到的。
 
后退
顶部