哪里有有关rave的学习资料,知道的请帮忙告诉一下!!!!!

olddaddy 2003-12-24 02:16:49
哪里有有关rave的学习资料,知道的请帮忙告诉一下!!!!!
...全文
175 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
konhon 2003-12-24
  • 打赏
  • 举报
回复
我在DELPHI版块RAVE报表上解决的问题较多,而且发现提出的问题都有很大的相似性(本来提交了几个FAQ,但不知何时才能通过审核),所以就先整理一下自己的一点经验,希望能带给大家一点帮助,如果你觉得没什么用大可不必看.:)

以下的程序在XP+D6+Rave5.1下调试通过,

问题1:动态的设置报表中的内容

   uses

RVClass, RVProj, RVCsStd;

var

MyPage: TRavePage;

MyText: TRaveText;

begin

RaveProject1.Open;

With RaveProject1.ProjMan do begin

MyPage := FindRaveComponent('Report1.Page1',nil) as TRavePage; //查找PAGE

MyText := FindRaveComponent('Text1',MyPage) as TRaveText; //查找TEXT

MyText.Text := 'Boland Delphi'; //设置报表中文本内容

MyText.Color := clGreen; //设置颜色

end; { with }

RaveProject1.ExecuteReport('Report1');

RaveProject1.Close;

end;



问题2:保存报表为HTML或PDF格式(对于PDF格式不支持中文)

   rvproject1.projectfile :='E:\delphi\rave\files\test.rav';

rvproject1.Open;

rvproject1.SelectReport('report1',true);//选择要打印的报表

RvSystem1.DoNativeOutput:=false;

RvSystem1.DefaultDest:= rdFile;//保存成文件

RvSystem1.RenderObject:=RvRenderHTML1;//保存成HTML格式 或RPRenderPDF1;

RvSystem1.OutputFileName:='files/test.html'; //存放的路径

RvSystem1.SystemSetups:=RvSystem1.SystemSetups-[ssAllowSetup];

try

rvproject1.Execute;

except

ShowMessage('生成报表文件错误!');

end;

对于只有一页报表那是没有问题的,但对于多页在D6下和D7有所不同.D6下可以生成许多页,但D7下却

不行,不知为什么?D6下的RAVE版本是5.1,



问题3: IntraWeb和Rave的无缝连接

我的思路就是先把报表保存成HTML或PDF格式,然后再用IE调用

const

AIPOptions: string = 'toolbar=no,status=no,menubar=yes,scrollbars=yes,resizable=yes,location=no,directories=no,width=1000,height=700';

var

aipurl :string;

rvproject1.Open;

rvproject1.SelectReport('report1',true);//选择要打印的报表

RvSystem1.DoNativeOutput:=false;

RvSystem1.DefaultDest:= rdFile;//保存成文件

RvSystem1.RenderObject:=RvRenderHTML1;//保存成HTML格式

RvSystem1.OutputFileName:='files/test.html'; //存放的路径

RvSystem1.SystemSetups:=RvSystem1.SystemSetups-[ssAllowSetup];

try

rvproject1.Execute;//生成报表

AIPURL := WebApplication.URLBase + '/files/' + 'test.html'; //IE打开第一页报表

AddToInitProc('NewWindow("' + AIPURL + '", "Agenda", "' + AIPOptions+'");');

except

webapplication.ShowMessage('生成报表文件错误!');

end;



问题4: 让最终用户动态的修改报表格式.

with RvProject1 do

begin

DLLFile :='D:\Rave5\Redist\RaveSolo.dll'; //如果不指定此文件则运行时会报出错

ProjectFile :='E:\delphi\rave\files\test.rav'; //指定RAV文件

LoadDesigner :=true;

If Design then begin

If MessageDlg(Trans('Save changes to project ') +

ProjectFile + '?',

mtConfirmation,

[mbYes,mbNo,mbCancel],0) = mrYes then

begin

Save;//保存

end; { if }

end; { if }

end;{with}

此程序在D6+Rave5.1下调试通过.在D7下就用Rave.dll




回复人: qxj(Borland中国&游民) ( ) 信誉:135 2003-5-6 9:16:39 得分:0


问题5: 设计时通过程序动态向报表增加一个TEXT

uses

RVClass, RVProj, RVCsStd,RvCsRpt;



var

MyBand: TRaveBand;

MyRegion: TRaveRegion;

MyPage: TRavePage;

MyText,mytext1: TRaveText;

begin

RvProject1.Open;

With RvProject1.ProjMan do begin

MyPage := FindRaveComponent('Report1.Page1',nil) as TRavePage;

MyRegion:= FindRaveComponent('Region1',MyPage) as TRaveRegion;

MyBand := FindRaveComponent('Band1',MyRegion) as TRaveBand;

MyText:=TRaveText.Create(Myband);

MyText.Parent:=Mypage;

MyText.Name:=GetUniqueName('Text125',MyPage,false);

MyText.Top:=0.2;

MyText.Left:=0.7;

MyText.Width:=200;

MyText.Height:=200;

MyText.Text:='Delphi';

MyText.Font.Size :=20;//设置字体的属性

MyText.Font.Color :=ClRed;

MyText.Font.Name :='隶书';

AddComponent(MyText);



end; { with }

RvProject1.ExecuteReport('Report1');

RvProject1.Close;



问题6:在报表中插入日期或页数

在RAVE设计时增加一个DATATEXT控件,其DATAFIELD属性有相关的设置

Report Variables中有CurrentPage当前页,TotalPages总页数,DateShort短日期,DateLong长日期,

TimeLong 长时间



问题7:通过参数向报表传值,和问题1有点相同

     With RaveProject1 do begin

Open;

SetParam('ParamName','ParamValue');

ExecuteReport('Report1');

Close;

end; { with }





问题8:去掉打印预览时出现的Output Options对话框

RvSystem.SystemSetups中的ssAllowSetup 设为False



konhon 2003-12-24
  • 打赏
  • 举报
回复
2003-10-13 1:03:10 关于自动展栏与画线延长的做法。RAVE的那个datamemo的expandparent:=true能自动展栏确实是一个很爽
的功能。
但如果我们是自己新建的datamemo,却在这个方面会出现错误,我现在
也搞不清楚究竟是什么原因,怀疑是RAVE的一个小BUG,第三方控件有
些意外也性正常。那我们就得避开它而进行操作。
具体的做法是先在你的RAVE设计器里,在那个databand里放上几个datamemo,
在用的时候修改它,而不是去创建它,就一切OK了。

至于那条画线的anchor如果是(V-strech/left)的话,可以延长,但是这个
在脚本生成的时候也会出现一些问题。那个anchor是一个TraveAnchor的值,
但其值的表达方法我找寻了N天都没有找到可以让我编绎过去。甚至于我用
已有的边框(一般情况下脚本生成还是画一些基本的框框容易实现些),以
myDAtamemo.anchor:=(rvproject1.projman.findcomponent('asdf',mypage) as TRaveVline).anchor
都编绎不过去,甚为恼火,于是解决方法同上,也是预先在设计器里画上有限
的几条线,把这些anchor设好,并把left设成与边框重叠(这样就视觉上可以
满足的。),在脚本中控制它的left值就OK了。


2003-10-18 1:52:17 想不到QXJ大侠大驾光临。QXJ大侠大驾光临,真是让我荣幸之至,还望多多指教。:)
你不是在那篇贴子里说要寻求其他出路了么? 现在如何?

他的那个贴子确实是经典,个人认为应该算是中文第一手资料,呵呵,我也再
贴一遍,大家看看:
http://expert.csdn.net/Expert/topic/1743/1743788.xml?temp=.1427576


2003-10-27 15:03:22 to qxj: 
 QQ上可以通过验证否?
 我的好友列表已经期待你好久了。 :)


2003-10-27 16:03:48 关于一些anchor,pagesize等的赋值。前面讲到datamemo的时候,说到anchor赋值不能通过。

今天突然用起了paperSize的时候试了一下,用整数输入,有变化。
于是在dataMemo里也试了一下,用整数也有变化。

于是怀疑这个整数是否为该属性取值的序号。
但在paperSize里验证,发现有变化,但是没有发现相应的规律。

哪位同志如果发现了,告诉告诉。谢谢。


2003-10-27 20:54:33 上面那个QXJ文档的链接不能用了。这个富翁笔记似乎只有第一栏可以修改,其他栏不能修改。
上面提到的QXJ的文档已经不是那个链接了,它在后面的评语里也有说到,
我这里再贴一遍,以便大家参阅。
http://search.csdn.net/expert/topic/53/5311/2003/5/6/1743788.htm


2003-12-1 1:49:30 几个问题的自问自答。(CSDN)http://expert.csdn.net/Expert/topic/2508/2508675.xml?temp=.2401087

几个问题:
 1、如果实现空白表格?
   比如说,某些表格每一页都是填满整页的,如果数据不足以填充整页,
 则其他的行为空白行,填满整页。
 2、表底栏。
   意思就是说如果建一个栏,让那些内容老是处于末页页脚的位置。如果
 上面的问题解决了,可能这个就不是问题了。
 3、左边的“合并单元格”。
   我不知道大家是如何实现类似“合并单元格”的功能,我现在的做法是
 一种愚笨的方法,就是在REgion的左边画一个框框。。。但这个框框的高度
 要保证它的上线与下线与表格内的其他记录内容相匹配时就出现了难题,因
 为由于memo的展栏,那个高度很难估计。大家是如何实现的?或者说,这个
 高度如何取得?
谢谢了。


我自己的问题已经解决。
现把我的解决思路说出,希望能有人遇到时会有些帮助。
  一、如果是只有一页,而且刚好那里面又都没有用到会换行的
datamemo,那么,可以从数据集着手。select top 20 * from
(select a,b,c from table where ...
Union all select null,null,null from table) AAA
  二、当然,第一步解决了,这一步随之解决。这里要注意到的
就是一个关于BAND的PositionMode属性。它有三种属性,选择pmAbsolute
可以选择固定的位置。再加上BandStyle设置成first,就可以实现
末端表底打印。
  三、在左边加一个方框,把背景前景设置好,在上面放一个合
适位置的Memo,下端不要划线,数据栏里的线也不要画到这里,然
后在底端紧跟一个Band,画一条top为零的Hline。
konhon 2003-12-24
  • 打赏
  • 举报
回复
我贴一点吧。

在大富翁笔记列表中有的。

以下文字属大富翁(delphiBbs)ICET所撰写,如有引用,请注明。呵呵。

RAVE报表的优点甚为明显,在此我也不必再进行过多的讨论。
但当我在开始用这个东西的时候,就有一个很不爽的地方是不容易动态对其进行控制。
在大富翁上悬分几天没有人回应,在网上穷搜一遍,有价值的只有在“程序员大本营”
中的qxj老兄的发言。但由于个人原因,高手已经离开delphi与rave。我是初学者,在
此把一点点心得奉出,愿对大家有一定的用处。

(在写上面的文字时还以为大侠不再来,后来他还是来了,并把它那篇文章的链接的改变
做了说明,下面是他总结性文章的链接:
http://search.csdn.net/expert/topic/53/5311/2003/5/6/1743788.htm)

顺便,借这个机会,也想与一些人交些朋友,共同探讨,我的QQ:588527, 
Email: Icet_xingkong@21cn.com,欢迎打扰。:)

1、明确RAVE的结构:
   RVproject->projman->dataview,report

dataview->stringfield, integerfield....

report->page->region->band,databand->text,datatext,memo,datamemo....

2、了解组件的类。
  一般而言,组件的类名可以看RAVE设计器中的component前面的那个单词前面加上个
TRave,如text,则其类为TRaveText, DataText类为TRaveDataText.

3、了解一定的联系。
  这一点尤其是在创建DataText时要了解清楚。要创建一个DataText,则一定要有其
对应的StringField, IntegerField...,如果没有,则创建之。

4、了解要uses的units:
  Rave要uses的units较多,下面有个列表:

RvCsStd :TRaveText,TRaveMemo,TRaveSection,TRaveSection,TRaveMetaFile,
TRaveFontMaster,TRavePageNumInit

RvClass:TRaveComponent,TRaveControl, TRaveContainerControl,
TRaveContainerComponent,TRaveProjectItem,TRavePage

RvCsData:TRaveDataText,TRaveDataMemo,TRaveCalcText,
TRaveDataMirrorSection,TRaveDataCycle, TRaveCalcOp,TRaveCalcTotal,TRaveCalcController

RvCsBars: TRavePostNetBarCode,TRaveI2of5BarCode,TRaveCode39BarCode,TRaveCode128BarCode,
TRaveUPCBarCode,TRaveEANBarCode

RvCsDraw: TRaveLine,TRaveHLine,TRaveVLine,TRaveRectangle,
TRaveSquare,TRaveEllipse, TRaveCircle

RvDataField: TRaveStringField,TRaveIntegerField,
TRaveBooleanField,TRaveFloatField,TRaveCurrencyField,TRaveBCDField,
TRaveDateField,TRaveTimeField,TRaveDateTimeField,TRaveBlobField,
TRaveMemoField,TRaveGraphicField,TRaveInt64Field

RvDatabase: TRaveDatabase

RvDirectDataView: TRaveDataView,TRaveDriverDataView

RvProj:TRaveReport,TRaveProjectManager

RvSecurity:TRaveSimpleSecurity,TRaveLookupSecurity

RvCsRpt:TRaveRegion,TRaveBand,TRaveDataBand,TRaveIterateBand,
TRaveBandStyle,TRaveDataCycle,

5、实例:
uses
RpRave, RVClass, RVProj, RvCsRpt, RVCsStd, RvCsData, RvDirectDataView,
RvDataField;


procedure TForm1.Button1Click(Sender: TObject);
var MyPage: TRavePage;
MyBand: TRaveBand;
MyRegion: TRaveRegion;
mytext2: Travetext;
mydataband: Travedataband;
mydatatext: Travedatatext;
myDataView: TRaveDataView;
myfield: TraveStringField;
begin

form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add('select name,mobile,hometele,CnD from address');
form1.ADOQuery1.Open;

form1.RvProject1.Open;

With RvProject1.ProjMan do
begin
MyPage := FindRaveComponent('Report3.mainPage',nil) as TRavePage; //查找page (注意,查找page,dataview后面的parent引用的是nil,而其他的页面上的对象引用时用page,比如说如果是某BAND下的一个TEXT,你不能引用这个BAND找到它,而是要用PAGE名。)

MyRegion:= FindRaveComponent('dataview1Region',MyPage) as TRaveRegion;

MyBand := FindRaveComponent('DataView1Band',Mypage) as TRaveBand;
// MyBand := TRaveBand(mypage.Components[3]);

MyText2:=TRaveText.Create(Myband);
MyText2.Parent:=Myband;
MyText2.Name:=GetUniqueName('Text125',MyPage,false);
MyText2.Top:=0;
MyText2.Left:=5.2;
MyText2.Width:=200;
MyText2.Height:=200;
MyText2.Text:='号码';
MyText2.Font.Size :=15;//设置字体的属性
MyText2.Font.Color :=Clmaroon;
MyText2.Font.Name :='宋体';
AddComponent(MyText2);
//建立新文本,TraveText,列标题。

myDataView:=FindRaveComponent('DataView1',nil) as TraveDataView;
//myDataView:=TraveDataView(rvproject1.ProjMan.Components[0]);
myfield:=TRaveStringField.Create(myDataView);
myfield.Parent:=myDataView;
myfield.Name:='dataview1CnD';
myfield.FieldName:='CnD';
myfield.FullName:='CnD';
myfield.Size:=4;
addcomponent(myfield);
//建立新的字段,tStringfield,字段。

MydataBand := FindRaveComponent('dataview1dataBand',Mypage) as TRavedataBand;
//MydataBand := TRavedataBand(mypage.Components[8]);
Mydatatext:=TRavedataText.Create(Mydataband);
Mydatatext.Parent:=Mydataband;
Mydatatext.Name:=GetUniqueName('dataText125',Mypage,false);
Mydatatext.Top:=0;
Mydatatext.Left:=5.2;
Mydatatext.Width:=1;
Mydatatext.Height:=200;
mydatatext.DataView := myDataView;
mydatatext.DataField:='CnD';
Mydatatext.Font.Size :=12;//设置字体的属性
Mydatatext.Font.Color :=Clblack;
Mydatatext.Font.Name :='宋体';
AddComponent(Mydatatext);
//建立新的列,Tdatatext,字段内容。
end;
form1.RvProject1.Execute;
rvproject1.Close;
end;

希望大家多多评论!
我这段时间在用,会继续修改。



2003-10-7 14:43:00
发表评语»»»

2003-10-13 0:53:08 关于数据类型的注意事项。如果你是自己创建新字段的话,那么,你一开始可能并不能确定该字段的类型。
在这种情况下,我的处理方法是把所有的字段类型定义为字符型,也就是在创建
字段的时候用TRaveStringField.Create(myDataView)

这里要注意的一点就是因为这是字符型,所以你的数据源也得都为字符型。
这里提倡用query组件,在SQL语句中把所有的字段都转化成字符型。这点
在SQL server中甚为方便,一个STR函数就可以摆平了。在用到一些整型
数(如count函数等)时,这点就需要很是注意了。


5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧