FastReport动态赋值,会者不难 (50分)

  • 主题发起人 主题发起人 king.gray
  • 开始时间 开始时间
K

king.gray

Unregistered / Unconfirmed
GUEST, unregistred user!
两个Memo之间如何传递值?
Memo1在Page1上,
Memo2在SubReport1上且Memo2的值为合计数 SUM()
如何将Memo2的值赋给Memo1
以下代码在frReport1的所有事件中执行均无效
var
t: TfrMemoView;
sTotal: String;
begin
t := TfrMemoView(frReport1.FindObject('Memo2'));
if t <> nil then
sTotal := t.Memo.text;
t := TfrMemoView(frReport1.FindObject('Memo1'));
if t <> nil then
t.Memo.text := sTotal;
end;
 
怎么没有人回答,再加50分吧!
顺便再问一个问题:
TEXT字段含空格时报表会显示一个个框框,如何去除它(用TRIM()只能去掉两边的空格)
 
procedure TForm1.frReport1BeforePrint(Memo: TStringList;
View: TfrView);
var
t: TfrMemoView;
sTotal: String;
begin
t := TfrMemoView(frReport1.FindObject('Memo2'));
if t <> nil then
sTotal := t.Memo.text;
t := TfrMemoView(frReport1.FindObject('Memo1'));
if t <> nil then
t.Memo.text := sTotal;
end;
 
To:woyaoying
谢谢参与,不过你的代码和我的没有不同之处呀???
 
呵呵,首先感谢king.gray你给我的问题的解决。
这个问题可以这么作。
你把Memo1上的值设为变量[Total],Memo2上值设为变量[SubTotal],
然后在Memo2的begin
和end脚本编辑框下输入
begin
[SubTotal] := sum(...);
end;
然后在frReport1的OnGetValue事件中对变量Total赋值:
procedure Tfrm.frReport1GetValue(const ParName: String;
var ParValue: Variant);
var
tmp: variant;
if ParName = 'SubTotal' then

tmp := ParValue;
if ParName = 'Total' then

ParValue := tmp;
 
To:扁舟一叶
失败了:(
我想可能是因为Memo1先于Memo2获得值的原因吧!
procedure Tfrm.frReport1GetValue(const ParName: String;
var ParValue: Variant);
var
tmp: variant;
if ParName = 'SubTotal' then

begin
tmp := ParValue;
ShowMessage(tmp);//得到空
ShowMessage(IntToStr(tmp))//得到0
end;
而实际上打印显示的为一个非0值。
 
由于我们对fastreport内层不是很了解,所以我见意你还是将这个值先算出来,传参数进去啦。反正能达到目的就行了,不要在一条绳上吊死了。
 
To:CaiHua
我还不太急,主要想多了解一些好方法。
我想FastReport不至于这么弱的吧!
 
在这个事件frReportbegin
Doc;
frVariables['sum'] := memo1.text;
定义
再引用
 
To:qyyok
有进展,不过取出的是:
[SUM([AdoQryM_1_1."S1"]+ [AdoQryM_1_1."S2"]+ [AdoQryM_1_1."S3"])]
而不是计算结果,这怎么处理? 请再次出手相助,谢谢先。
 
to king.gray:
我昨天用你的代码成功的把memo2('123456')赋给memo1('56789')了
我用的是2.5(好像是2.4的)
我想是不是你用的是表达式
所以出现了问题
如果把sTotal定义到外部呢?
 
你可以查一下它自带的例子吗!
 
按例程试了一下
Memo1设为[Total]
在Memo2的脚本中写: Total := 'A';
提示:Total不存在:(
 
简单:
procedure TFrm_main.frReport1GetValue(const ParName: String;
var ParValue: Variant);
begin
if parName='inv1sayamount' then
begin
parValue:='这段字串是动态显示出来的';
end;
end;
在fr设计器中Tmemo参数用中夸号表示
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部