关于fastreport里大小写转换,简单问题,我没用过fastreport,给各位送分了。(60分)

  • 主题发起人 主题发起人 凤舞九天
  • 开始时间 开始时间

凤舞九天

Unregistered / Unconfirmed
GUEST, unregistred user!
前天在大富翁提问得到如下答案:
在菜单数据字典里设置变量xxx,指定xxx对应的字段,然后在fastreport的
OnGetValue事件里写xxx:=ConvertMoney(fieldbyname('').value);

问题是我要对应的字段是要计算后得到的字段,该如何写呢
我新建一变量aaa,指定aaa为表达式,并给表达式赋我需要的计算值。
之后该如何改写呢
谁有别的解决办法也行啊。谢谢。
 
建立计算字段,在数据集的计算事件中,
利用转换函数计算出此字段的值,在报表中把它当作一般字段处理就可以了
转化货币大写的东西,这儿有一个,我自己写的组件,
应该是很不错的,推荐
http://new.playicq.com/dispdocnew.php?id=5011
 
to LCH
我也想过,我的计算字段很长,有日期加减,很不方便
我想知道在fastreport里怎么实现,
以后就可以舍弃quickrep了
 
在frReport1的begin
Band事件写代码也可以啊。 好像fastreport有大小写转换的函数的。
 
begin
band?写在那里是什么意思
?怎么写
report mechine有那功能吧
外国人的东西怎么能有大小写转换呢
 
我想先从可以实现的方面考虑,再从复杂度方面考虑,
我是用计算字段和FastReport中的函数配合使用的,
综合效果还不错,但是感觉fastreport控件很不错,
可是写的代码实在是不怎么样啊,估计都是些九流程序员写的代码
 
to lch
我觉得要是用计算字段反而复杂了,
要写日期转换,字符转换,
我等小菜鸟不象阁下水平那么高,fastreport也任意评说
不要说代码,能用明白就不错了,惭愧
话说回来,谁能回答我的问题啊
就按我的想法实现,我觉得不难啊
 
计算字段是最简单的办法了,不信你试试看吧
我还遇到过金额按位套打的发票,是用计算字段和FastReport函数一起搞定的
否则,可是太麻烦了
 
to lch
With table1do
begin
FieldByName('total’).Value:= FieldByName('库存').Value* FieldByName('单价').Value;
end;
像上面的简单表达式还可以计算
(系统日期-‘结束日期’)*2*‘典当金额’
这样的表达式辉哥觉得该如何写呢,就算写出来,我觉得也不见得比我的方法简单到那里去
不是很难,比我说的方法要烦琐吧
请辉哥指教

 
计算字段的能力是通过Delphi代码来体现的,
除了汇总和统计字段(这一类要用TClientDataSet)
多么复杂的计算方式也都能搞定,
所以,一般是计算字段和报表中的函数配合使用,
譬如,人民币转化为大写,我觉得用计算字段更方便一些,
虽然报表也有自定义函数,但那个东西好像是骗人的,用不了啊
 
我的水平其实烂的很,不过是前些天用了一段时间的FastReport,
感觉毛病多多,某个报表组件竟然使程序突然增大了,2M多,害的我要删掉它,
重新来做,设计的报表没有什么问题,但是预览时却老是报错,没办法,
删掉重做,想要在程序中加载和保存模板,每次都加载失败,我只好自己写
加载和保存的函数,同时也发现其源代码中读取模板的部分没有对异常做出
合适的处理,可能会引起资源或对象的泄漏
现在研究了一下FastReport的源码,感觉还是不错了,可能不是一个人写的,
水平不同,难免会有些写的不好的代码,但FastReport已经很不错了,
不管是功能还是易用性等方面都很不错了,
从QuickReport转向FastReport的确是越早越好
 
to lch
辉哥能不能给我发一个转换的例子看看,先谢了。
(系统日期-‘结束日期’)*2*‘典当金额’这样的表达式
该如何写呢,(系统日期-‘结束日期’)这样的日期加减该如何计算呢
小弟水平有限,请指教。
 
谦虚啊,辉哥,
本期排行第七,可不是浪得虚名啊。
只是delphi太深,各人发展方向又不同,对同一问题,
想法难免有远近。我还是觉得你的办法不够简洁,(呵呵,虽然我很菜)
叶不归向我推荐report mechine,你也试试。
 
谁来答我的问题
 
在Delphi中对于计算字段不一定要写成表达式,可以分步计算,
最后得到计算结果,不知道你要的是报表中的表达式,还是程序中的表达式
下面是我的一个发票打印程序中的计算字段的计算代码,
其中计算了一个余额(两个相减)
还有中文大写的字段,
还有一个阿拉伯数字金额套打的字段,和FastReport中的表达式配合使用
(免得建立10个计算字段)
阿拉伯数字金额套打时,要求每个位置上一个数字,最前面补上一个 ¥
我放了10个FastReport的Memo,表达式写成
[TRIM(COPY([QPrintAccount."opvalue_s"], (1~10)*2-1, 2))] 就可以实现完美打印了
procedure TMainFrm.QPrintAccountCalcFields(DataSet: TDataSet);
var
s, t: String;
i: Integer;
begin
DataSet.FieldByName('leftfee').AsCurrency :=
(DataSet.FieldByName('deposit').AsInteger -
DataSet.FieldByName('phonecost').AsInteger) / 100;
DataSet.FieldByName('opvalue_cn').AsString :=
TCnDigits.LzhFmtCurrency(DataSet.FieldByName('opvalue').AsInteger);
s := Format('%d', [DataSet.FieldByName('opvalue').AsInteger]);
s := StringOfChar(' ', 9 - Length(s)) + '$' + s;
t := '';
for i := 1 to Length(s)do
begin
if s = '$' then
t := t + '¥' else
t := t + s + ' ';
end;
DataSet.FieldByName('opvalue_s').AsString := t;
end;
 
你的那个表达式在FastReport中这么算
[INT((DATE - INT(enddate)) ) * 2 * 100]
在计算字段中这么算
var
LstDt: TDateTime;
begin
LstDt := StrToDate('2003-6-21');
DataSet.FieldByName('haha').AsCurrency :=
(Int(Date) - Int(LstDt)) * 2 * 100;
 
好,我先琢磨琢磨,谢谢辉哥
 
to LCH
问题解决,是用计算字段的方法。
的确简单,多谢辉哥指教。
还有个问题,上面你给的例子里是不是有关于打印时将数据库里的数字
按位打印到一个一个的小格里的代码,我的水平不高,看不大懂,
那个$号是不是数据库里货币格式带的,如果发现$,就打印¥……
暂时不结帖,想让叶不归大哥来看看他有什么好的办法。
我想辉哥不会介意吧,呵呵
 
发票上的格子一般有10个,你把你的货币字段乘以100,取整,
然后转化为字符串,如果不够10位,则前面补上一个¥符号,
以为¥是一个汉字,占两个字节,而且他的数字仅占一个字节,
所以我暂时以$代替,如果还不够10位,前面补上空格,
最后作一遍扫描将单字节转化为双字节,主要是为了¥的正确处理
除了$之外每个字符都补上一个空格,总长度会变成20,
然后,10个打印的格中每个格,都按顺序取这个字符串中的相邻的两个字符
然后再Trim掉其中的空格,这样就解决了¥是双字节的问题,(而且后面的操作可以
在报表中完成)
我是想了很久才想到这个好办法的,
本来,我还想建立10个计算字段呢,
但是那样就复杂多了,
如果仅仅使用报表的表达式,可能根本不能实现
我上面的代码其实不够严谨,你理解意思就可以了
 
这样就可在FastReport设计时调用NumToBig函数了
procedure TForm1.frReport1UserFunction(const Name: String;
p1, p2,
p3: Variant;
var Val: Variant);
var
a: string;
b:do
uble;
begin
if AnsiCompareText(Name, 'NumToBig') = 0 then
begin
a := frparser.Calc(p1);
Val := NumberBig(a);
end;
if AnsiCompareText(Name, 'CNumber') = 0 then
begin
b := frparser.Calc(p1);
Val := getcwordstr(b);
end;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
926
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部