如何成批替换fastreport生成的frp文件中的某些字符?(300分)

  • 主题发起人 主题发起人 vmao
  • 开始时间 开始时间
V

vmao

Unregistered / Unconfirmed
GUEST, unregistred user!
如何成批替换fastreport生成的frp文件中的某些字符?
我现在遇到一个难题!
fastreport文件预览的时候只有“查找”文字的功能却没有“替换”功能?
我想了两种方法:
1.在预览状态下,从STREAM中挨个遍历"tmemo"!,找到“感兴趣的字符串”后替换!然后刷新界面
(这种方法最好--改的是内存中的数据,但估计很难实现!)
2.从frp文件中读数据!找到“感兴趣的字符串”后替换!界面重新从磁盘上load文件一次!
不过这种方法的就是要知道FRP文件的存储格式!我看了一下源代码,只能找到一些写“文件头”
的信息,如:
版本号 是否压缩 打印机信息 等等
|-------|-------|----|----------|-----
没找到如何将TMEMO上的文字写入文件的信息!有谁能提供一些资料?
或许还有什么其它方法?时间比较急!帮忙啊!!
有谁能提供例程最好了!
 
http://www.jnnj110.gov.cn/jingning/dispbbs.asp?boardID=1&RootID=6391&ID=6391
 
用外部程序,UltraEdit功能强大。可以一试.
 
谢谢whf我试一下!
 
我测试了一下把所有文本赋成'aa';没有任何效果!错在哪里??
var
i, j: Integer;
lPage: TfrPage;
t:tfrview;
s:string;
begin
uereport.LoadPreparedReport('c:/aa.frp');
//我的文件
for i := 0 to ueReport.EMFPages.Count - 1do
begin
ueReport.EMFPages.ObjectsToPage(i);
// 这样可以得到每页中的所有对象
lPage := ueReport.EMFPages.Pages^.Page;
for j := 0 to lPage.Objects.Count - 1do
// 处理一页
begin
t:=lpage.Objects[j];
if (t is tfrmemoview) then
begin
tfrmemoview(t).Memo.Clear;
tfrmemoview(t).Memo.Text:='aa';
//把所有文本都写成aa;
// showmessage(tfrmemoview(t).Memo.Text);
end;
end;
ueReport.EMFPages.Pages^.Page.Free;
ueReport.EMFPages.Pages^.Page := nil;
end;
uereport.ShowPreparedReport;
//预览出来报表上没有任何变化!和原来的一模一样!
// uereport.SavePreparedReport('c:/dd.frp');
//这样存成的文件只有19个字节,打不开;
end;
 
uereport.LoadPreparedReport('c:/aa.frp');
//我的文件
for i := 0 to ueReport.EMFPages.Count - 1do
begin
ueReport.EMFPages.ObjectsToPage(i);
// 这样可以得到每页中的所有对象
lPage := ueReport.EMFPages.Pages^.Page;
for j := 0 to lPage.Objects.Count - 1do
// 处理一页
begin
t:=lpage.Objects[j];
if (t is tfrmemoview) then
begin
tfrmemoview(t).Memo.Clear;
tfrmemoview(t).Memo.Text:='aa';
//把所有文本都写成aa;
// showmessage(tfrmemoview(t).Memo.Text);
end;
end;
ueReport.EMFPages.PageToObjects(Index: Integer);
//得修改fr_class.pas
ueReport.EMFPages.Pages^.Page.Free;
ueReport.EMFPages.Pages^.Page := nil;
end;
uereport.ShowPreparedReport;
//预览出来报表上没有任何变化!和原来的一模一样!
 
非常感谢whf大虾!我已经成功了!
顺便问一句;
ueReport.EMFPages.Pages^.Page.Free;
ueReport.EMFPages.Pages^.Page := nil;
这两句是必须写的吗?有啥意思?这个对象我没有自己创建呀??
 
接受答案了.
 

Similar threads

后退
顶部