前面两篇
向大家介绍了RAVE的组件
从今天开始向大家介绍如何建立报表
首先要感谢li jack等各位朋友给我发的电子邮件
鼓励我继续写下去
今天也查了一下RAVE一词的意思
RAVE在辞典上的翻译为咆哮 raveup喧闹的宴会 狂欢聚会我们经常也听到锐舞派对也就是RAVE PARTY
要对Rave文化追根溯源其实不太容易并非是因为其无从追溯恰恰相反正因为它涵盖的面太广根基太深所以反而让人有些无从入手从远的来说Rave与各块大陆上土着部落的祭典仪式有着相当的渊源因为这些祭典通常也是通过音乐与紧密的鼓点而使人进入某种超验状态从近的来说Rave又与年代的嬉皮文化与迷幻实验有着密不可分的关系两代年轻人除了装扮不同许多心理状态与行为方式其实都有值得注意的相似之处
真正当代的将新式音乐与舞曲相结合的Rave运动起源于英国多年前Rave首先出现在曼彻斯特和伊比沙岛(英国着名度假胜地)年末及年初两个并无关系的团体Schoom和Genesis P开始在英国组织彻夜的舞会前者是以house音乐为主而后者以hardcore为主与此同时Rave在德国登陆在柏林等大城市很受欢迎很快Rave在英德两地吸引了数以万计的青少年更吸引了许多来自美国的DJ
现在Rave已经是欧美日甚至港台最时兴最UNDERGROUND的一种青少年娱乐形式Rave 文化从一开始便被打上了高科技的烙印从急速疯狂的前卫电子舞曲新奇剌激的影像视觉到Sharp得眼花缭乱的装束Rave与ELife已经成为科技对青年文化影响的见证
当然我也不知道为什么Nevrona公司把这个报表组件叫做rave也许和锐舞有着一定的关系吧就像java咖啡
一建立一张简单的报表
言归正传我们开始建立一张简单的报表打开Delphi 新建一个工程打开Tools下的Rave Designer在Rave 设计器的page中拖放Text我们在text属性中写入文字内容例如我的第一张报表 通过Font属性更改字体和字的大小颜色等拖放Memo组件在text属性中输入文字可以看到一个多行的文本拖放Bitmap组件在FileLink属性中选取插入图片的位置就可以看到在报表中显示了一张图片
点击[Execute Report]或者F则查看到运行后报表
接下来对在可视环境中设计好的报表保存可视化的报表就保存为*rav文件那么在delphi程序中如何调用呢?在delphi中拖放RvProjectRvSystem组件并且把RvProject的Engine属性连接为RvSystemRvProject的ProjectFile属性选择为我们刚才保存的rav文件再在form上放置一个Button添加click 事件代码如下
procedure TFormButtonClick(Sender: TObject);
begin
RvProjectExecute ; //或者 RvProjectExecuteReport(Report);
end;
运行程序点击按钮就可以看到我们想要的报表了您可能注意到打印设置报表预览的窗体都是英文的如何使它显示中文我们在以后会介绍不过我们刚才在窗体中放入了RvSystem组件有TitlePreviewTitleSetupTitleStatus三个属性更改后可以看到我们窗体的标题栏显示的是您所希望显示的中文标题RvSystem组件有很多我们需要的属性将SystemPrinter的Orientation属性设置为poLandScape则报表显示为横向的将SystemPreview 的FormStatus属性设置为wsMaximized则报表预览的窗体最大化显示
好了这样我们就完成了一张简单的报表
二利用程序设计一张报表
上面向大家介绍了建立一张简单报表的过程下面向大家介绍rave报表代码编程实例窗体上放置组件RvSystem Button即可
具体代码如下
unit Unit;
interface
uses
Windows Messages SysUtils Variants Classes Graphics Controls Forms
Dialogs StdCtrls RpDefine RpBase RpSystem;
type
TForm = class(TForm)
RvSystem: TRvSystem;
Button: TButton;
procedure RvSystemPrint(Sender: TObject);
procedure ButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form: TForm;
implementation
{$R *dfm}
procedure TFormRvSystemPrint(Sender: TObject);
var
I: integer;
S: string[];
S: string[];
Bitmap: TBitmap;
PolyLineArr: array[] of TPoint;
begin
with Sender as TBaseReport do begin
{ 打印表头和表尾 }
SectionTop := ;//顶端
SetFont(黑体);//设置字体
Underline := true;//下划线
Home;
YPos := ;
FontRotation :=;//旋转角度
PrintCenter(我的报表PageWidth / );
SetFont(宋体);
SectionBottom := ;
PrintFooter(第 + IntToStr(CurrentPage) + 页pjLeft);//页码
PrintFooter(日期: +DateToStr(Date)+ pjRight);//日期
SectionBottom := ;
YPos := ;
SetFont(宋体);
SetTopOfPage;
Home;
{ 打印列标题 }
ClearTabs;
SetPen(clBlackpsSolidpmCopy); { 设置画笔为一个点宽 }
SetTab(pjCenterBOXLINEALL);
SetTab(NApjCenterBOXLINEALL);
SetTab(NApjCenterBOXLINEALL);
SetTab(NApjCenterBOXLINEALL);
Bold := true;
Tab(NANA); { 画出具有粗边框的表格 }
Print(Name);
Tab(NANANA);
Print(Number);
Tab(NANANA);
Print(Amount );
Tab(NANA);
Println(Amount );
Bold := false;
{ 打印具有边框的数据 }
ClearTabs;
SetTab(pjLeftBOXLINEALL);
SetTab(NApjCenterBOXLINEALL);
SetTab(NApjRightBOXLINEALL);
SetTab(NApjRightBOXLINEALL);
for I := to do begin
Str(I * ::S);
Str(I * ::S);
Print(#LastName + IntToStr(I) + );
SetFont(Times New Roman);
Print(FirstName M);
SetFont(Times New Roman);
Println(# + IntToStr(I) + #$ + S + #$ + S);
end; { for }
{ 打印具有阴影的数据 }
ClearTabs;
SetTab(pjLeftBOXLINENONE);
SetTab(NApjCenterBOXLINENONE);
SetTab(NApjRightBOXLINENONE);
SetTab(NApjRightBOXLINENONE);
for I := to do begin
If Odd(I) then begin
TabShade := ;
end else begin
TabShade := ;
end; { else }
Str(I * ::S);
Str(I * ::S);
Print(#LastName + IntToStr(I) + );
SetFont(Times New Roman);
Print(FirstName M);
SetFont(Times New Roman);
Println(# + IntToStr(I) + #$ + S + #$ + S);
end; { for }
ClearTabs;
{ 分栏报表 }
ClearTabs;
SetTopOfPage;
SectionBottom := ;
Home;
SetFont(宋体);
Bold := true;
Underline := true;
Print( 分栏报表 (LinesLeft/ColumnLinesLeft/LineNum/ColumnNum));
SetTopOfPage; { Set top of page to current YPos }
Bold := false;
Underline := false;
Italic := false;
Home; { Goto home position }
SetColumns(); { Create columns with between each }
while ColumnLinesLeft > do begin
Println(IntToStr(LinesLeft) + / + IntToStr(ColumnLinesLeft) + / +
IntToStr(LineNum) + / + IntToStr(ColumnNum));
end; { while }
{ 具有边框的分栏报表 }
ClearTabs;
SetTopOfPage;
SectionBottom := ;
Home;
SetFont(Times New Roman);
Bold := true;
Italic := true;
Print(Boxed Columns);
SetTopOfPage; { Set top of page to current YPos }
Bold := false;
Italic := false;
Home; { Goto home position }
ClearTabs;
SetPen(clBlackpsSolidpmCopy);
SetTab(pjCenterBOXLINEALL);
SetTab(NApjCenterBOXLINEALL);
SetTab(NApjCenterBOXLINEALL);
SetTab(NApjCenterBOXLINEALL);
SetColumns(); { Create columns with between each }
while ColumnLinesLeft > do begin
if LineNum = then begin
TabShade := ;
Println(#LL#CLL#L##C#); { 打印标题栏 }
end else begin
TabShade := ;
Println(# + IntToStr(LinesLeft) + # + IntToStr(ColumnLinesLeft) +
# + IntToStr(LineNum) + # + IntToStr(ColumnNum));
end; { else }
end; { while }
SetColumns();
{ 在指定位置绘出文本 }
NewPage;
OriginX := ; { Set origin to normal }
OriginY := ;
GotoXY();
Print(Text @ );
GotoXY();
Println(Text @ );
GotoXY();
Println(Text @ );
GotoXY();
Println(Text @ );
{*** 图形图片***}
NewPage;
ResetSection;
SetFont(Arial);
Underline := true;
Home;
PrintCenter(Graphics Page DemoPageWidth / );
SetFont(Times New Roman);
SectionBottom := ; { Temporarily move the section bottom down }
PrintFooter(Page + IntToStr(CurrentPage)pjLeft);
PrintFooter(Date //pjRight);
SectionBottom := ; { Reset section bottom }
OriginX := ;
OriginY := ;
SetFont(Arial);
{ 半圆弧线}
SetPen(clBlackpsSolidpmCopy); { Set pen to black /ths wide }
YPos := ;
PrintCenter(Arc() and Chord());
Arc();
SetBrush(clBlackbsClearnil);
Chord();
{ 饼图 }
YPos := ;
PrintCenter(Pie());
SetPen(clBlackpsSolidpmCopy); { Set pen to black /ths wide }
SetBrush(clBlackbsHorizontalnil);
Pie();
SetBrush(clBlackbsVerticalnil);
Pie();
SetBrush(clBlackbsBDiagonalnil);
Pie();
{ Bitmap 图片}
YPos := ;
PrintCenter(PaintBitmapRect());
Bitmap := TBitmapCreate;
BitmapLoadFromFile(RPDEMOBMP);
PrintBitmapRect(Bitmap);
BitmapFree;
end;
end;
procedure TFormButtonClick(Sender: TObject);
begin
RvSystemExecute;//执行报表!
end;
end
好了这样我们并没有使用rave仅仅利用程序实现了报表