今天我试了动态创建报表的方法,第一页用静态制作好,第二页(续页)采用动态创建的方法,现贴段代码:
procedure TfrmXcjcbl.GetArrS(str:tstrings);
var
calStr:string;
k,i,len,arr_low,arr_high:integer;
begin
//处理string
calStr:='';
len:=str.Count-1;
//求页数
page:=len div 14;
if(len mod 14<>0) then
page:= page+1;
//设置动态数组arr_CalStr长度
setLength(arr_CalStr,page);
for k:=0 to page-1do
//页数-1因为数组是从0开始计数的
begin
//将计算的字符串存入动态数组arr_CalStr中
arr_CalStr[k]:='';
arr_low:=k;
arr_high:=13+k;
for i:=arr_low to arr_highdo
begin
arr_CalStr[k]:=arr_CalStr[k]+str.Strings+#13;
end;
end;
end;
procedure TfrmXcjcbl.CreateTheRptPages(Page:Integer);
var
i:integer;
begin
//设置生成新控件页数组长度
setLength(arr_tit1,page);
setLength(arr_tit2,page);
setLength(arr_jc,page);
setLength(arr_Page,page);
for i:=1 to pagedo
begin
//生成新页
arr_Page:= TRMReportPage.Create;
arr_Page:=RMRepSrc.RMReport1.Pages.AddReportPage;
//生成该页下的标题控件
arr_tit1:=TRMMemoView.Create;
//将此控个赋到该页上
arr_tit1.ParentPage:=arr_Page;
//
// arr_tit1.Create;
arr_tit1.Font.Height:=-40;
arr_tit1.Font.CharSet:=GB2312_CHARSET;
arr_tit1.Font.Name:='录书';
arr_tit1.BandAlign:=rmbaCenter;
arr_tit1.HAlign:=rmhCenter;
arr_tit1.Top:=38;
arr_tit1.Left:=136;
arr_tit1.Memo.Text:='煤矿安全监察';
end;
end;
procedure TfrmXcjcbl.Button1Click(Sender: TObject);
var
n: Integer;
Report: TRMReport;
begin
try
GetArrS(DBMemo1.Lines);
//动态生成报表
with RMRepSrcdo
begin
RMReport1.LoadFromFile('现场检查笔录.rmf');
CreateTheRptPages(1);
//动态生成报表续页生成page个页
// RMReport1.Pages.Pages[0].FindObject('memName').Memo.Text:='asdf';
// RMReport1.Pages.Pages[0].FindObject('memJC').Memo.Text:=arr_CalStr[0];
// RMReport1.Pages.Pages[0].FindObject('memDate').Memo.Text:=formatdatetime('yyyy"年"mm"月"dd"日"',date);
RMReport1.ShowReport;
end;
finally
//动态数组释放清零
SetLength(arr_tit1, 0);
SetLength(arr_tit2, 0);
SetLength(arr_jc, 0);
SetLength(arr_Page, 0);
// RMRepSrc.RMReport1.Pages.Pages[2].Free;
// arr_tit1[0].Free;
// arr_Page[0].Free;
end;
end;