问了好久了,就是没人来回答.一个动态生成的报表问题 (100分)

  • 主题发起人 主题发起人 eastnet
  • 开始时间 开始时间
E

eastnet

Unregistered / Unconfirmed
GUEST, unregistred user!
比如一个memo显示的多行文本,进行分页显示的问题。
现在有个问题想请教大家:
要求每页显示memo文本10和,多于10行的分页处理.
比如:memo有26行,就应该是这样的:
第一页显示1-10行,
第二页显示11-20行,
第三页显示21-26行.
我现在的思路是用动态生成报表的方法。
 
比如格式:
第一页
检查内容:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
..................
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
第二页
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
.................
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
第三页
..............
欢迎大家来讨论!谢谢!!!
 
memo文本显示的是纯文字,比如一篇文章。能根据这个文章的多少来打印预览的。
先UP
 
ReportMachine3我没有用过。。。。。
 
to 刘麻子,你终于来了,用其他报表也可以。
 
如果只是memo倒是可以试试。。。。你是否想这样:‘下一页’ ‘上一页’ 每次翻10行?
 
先给大家简单画一个吧:
现场检查笔录
检查单位______检查场所_____
许可证号______生产证号_____
检查人_______记录人______
检查情况_________________
________________________
_________________________
到了第二页就是
现场检查笔录续页
_____________________________
______________________________
___________________________
“检查情况”就是memo文本内容。
 
解决后立即再送200分!
绝不食言!!!
 
只是要在memo里面分页显示‘检查情况_________________’的内容吗?不过今天没空了,明天一定帮你想。。。
 
今天我试了动态创建报表的方法,第一页用静态制作好,第二页(续页)采用动态创建的方法,现贴段代码:
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;
 
//动态数组释放清零
处的动态报表居然还释放不掉,不知是哪的错?
 
关闭报表时,提示错误:“Invalid pinter operation”
 
我做了简单的关于Memo的分页显示例子,不知道是否符合你的要求?
对了,你qq叫什么?我找不到你了,看到了和我说句话,就找到你了。。谢谢
 
to 刘麻子,我的qq:179888201
 
问题已解决,散分!
 
谢谢你刘麻子。
 
后退
顶部