DELPHI版塊RAVE報表上解決的問題(zz)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
我在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
問題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
問題9:ndr格式轉化為pdf
var
NDRStream: TMemoryStream;
begin
NDRStream := TMemoryStream.Create;
try
NDRStream.LoadFromFile('files/test.ndr');
RvRenderPDF1.PrintRender(NDRStream, 'files/test.pdf');
finally
NDRStream.Free;
end; { tryf }
ShowMessage('NDR Converted');
end;
問題10: 分欄顯示(snaking columns)
name1 name6
name2 name7
name3 name8
name4
name5
窗體新增以下控制元件Rvsystem1,table1,DataSource1
procedure TForm1.Button1Click(Sender: TObject);
begin
ReportSystem1.Execute;
end;
procedure TForm1.ReportSystem1Print(Sender: TObject);
begin
With (Sender as TBaseReport),Table1 do begin
SetFont('Times New Roman', 20);
Bold := True;
Underline := True;
Home;
PrintCenter('NAME LISTING', PageWidth / 2.0);
SectionTop := 1.0;
MarginBottom := 0.75;
Home;
While not Table1.EOF do begin
SetColumns(2,0.5);
{OnNewColumn will be called after each call to SetColumns and on each
new column after that}
While (ColumnLinesLeft > 0) AND (NOT Table1.EOF) do begin
If FieldByName('NAME').AsString <> '' then begin
Println(FieldByName('NAME').AsString);
end; {if}
Table1.Next;
end; {while}
If not Table1.EOF then begin
NewPage;
end; {if}
end; {while}
end; { with }
end;
procedure TForm1.ReportSystem1BeforePrint(Sender: TObject);
begin
Table1.First;
end;
procedure TForm1.ReportSystem1NewColumn(Sender: TObject);
begin
With Sender as TBaseReport do begin
SetFont('Times New Roman', 14);
Bold := True;
UnderLine := True;
AdjustLine;
Println(' NAME');
SetFont('Arial',12);
AdjustLine;
end; {with}
end;
procedure TForm1.ReportSystem1PrintFooter(Sender: TObject);
begin
With Sender as TBaseReport do begin
MarginBottom := 0.5;
PrintFooter('Page ' + Macro(midCurrentPage)
+ ' of ' + Macro(midTotalPages), pjCenter);
MarginBottom := 0.75;
end; {with}
end;
問題11:通過rave面板中的textfiler把table中的內容直接列印到文字
在窗體上增加table,textfiler,button;
procedure TForm1.Button1Click(Sender: TObject);
begin
TextFiler1.FileName :='e:/rave/program/txtprint/tmp.txt';
TextFiler1.Execute;
end;
procedure TForm1.TextFiler1Print(Sender: TObject);
var
DoHeader: boolean;
begin
With Sender as TBaseReport,Table1 do begin
ClearTabs;
SetTab(0.5,pjLeft,3.0,0,BOXLINENONE,0);
SetTab(NA,pjLeft,3.0,0,BOXLINENONE,0);
SetTab(NA,pjLeft,1.5,0,BOXLINENONE,0);
First;
DoHeader := true;
While not EOF do begin
If LinesLeft <= 0 then begin
NewPage;
DoHeader := true;
end; { if }
If DoHeader then begin
PrintCenter('Customer Listing',PageWidth / 2.0);
NewLine;
NewLine;
PrintTab('name');
PrintTab('sex');
PrintTab('age');
NewLine;
DoHeader := false;
end; { if }
PrintTab(FieldByName('name').AsString);
PrintTab(FieldByName('sex').AsString);
PrintTab(FieldByName('age').AsString);
NewLine;
Next;
end; { while }
end; { with }
end;
問題12:設計好的Rave報表檔案如何打包到EXE檔案中
在rvproject的屬性中有一個storerav,你只要load .rav檔案即可
問題13:格式化字串
對於從資料來源取出的欄位如何格式化如price 在表中12345.25現要顯示為$12,345.2500
只需在設計時修改Data View Dictionary->dataview1->dataviewprice中的displayFormat為
$#,####,###.0000;
問題14:常常要USES到的單元
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,
部分資料來源於RAVE開發人員指南 ravedevguide5
新聞組News.Nevrona.com
RAVE的官方主頁 www.nevrona.com/rave
問題16:列印JPEG
法一:在RAVE上增加JPEG控制元件
Bitmap components can only display bitmaps, not jpegs. You'll need the jpeg
add-on that's available from the Nevrona web site,
http://www.nevrona.com/rave/addons.shtml.
Installation instructions for TRaveJPEGImage
--------------------------------------------
1: Extract the files in this archive in your Rave main directory
(normally d:/RAVE5). Make sure to expand with directories so that the source
will be placed in it's own directory.
2: Copy the NDCsJPEG.PAS file into the appropriate directory for the version
of Delphi or C++Builder that you are using (for Delphi 6.0 it would normally
be d:/RAVE5/D6).
3: Start Rave, go to the preferences dialog (Edit|Preferences), select the
Packages tab and add the D:/RAVE5/ND_JPEG.BPL package file to the list of
installed package and click OK.
法二,程式中控制,具體參照//www.nevrona.com/rave/tips/rvtip31.html