如何用1个Edit实现金额的大小写双向转换(100分)

  • 主题发起人 主题发起人 delhpi
  • 开始时间 开始时间
D

delhpi

Unregistered / Unconfirmed
GUEST, unregistred user!
这里假设 金额大小写函数是已知的,比如是
MoneyXxtoDx(XxStr:String);//小写转换成大写

在Edit里输入小写金额1234.56后,焦点退出时,Edit里的内容转换成大写 壹仟贰佰叁拾肆元伍角陆分。
这个过程没有问题。

现在的问题是,当焦点再次进入Edit时,如何让Edit里金额大写还原成最初的小写金额呢?
 
获得焦点时判断,若是汉字就转换成数字,若是数字就转换成汉字,感觉麻烦的是大小写转换函数,不过楼主已经搞定。判断汉字的方法网上能查到的,好像是 判断ASCII大于127的
 
楼上误会我的意思了。
 
试试在OnEnter中进行判断:
用TryStrToFloat(Edit1.Text, ve)来判断,成功就转大写,失败就转小写
 
当焦点再次进入Edit时,如何让Edit里金额大写还原成最初的小写金额呢?
 
下面使用Edit控件自身的Hint属性实现对小写值的保存:

Edit1.OnExit事件——小写转大写:
begin
with TEdit(Sender) do
begin
Hint:=Text;
Text:=MoneyXxtoDx(Text);
end;
end;

Edit1.OnEnter事件——恢复到小写:
begin
with TEdit(Sender) do
begin
if Hint<>'' then
Text:=Hint;
end;
end;

如果不用Hint属性暂存的话,就应该在OnEnter事件中利用MoneyXxtoDx的反函数实现反转。
 
谢谢楼上。

这种功能在很多软件看到。

关键的地方:当焦点再次进入Edit时,如何让Edit里金额大写还原成最初的小写金额

不知道具体是如何实现的?

我目前想到的和楼上的一样。

MoneyXxtoDx的反函数实现反转
====
估计不是这样实现的,这个比较麻烦。

另外一个思路是,从EDIT继承,再写个组件,增加一个字符串或者浮点类型的属性。不过我还不会。
 
我把它的tag值也换成另外一个标识,并把原来的数字临时存到其中的一个变量中,比如
str:string;
begin
with TEdit(Sender) do
begin
str := text;
if tag=0 then
begin
Text:=MoneyXxtoDx(str);
tag :=2;
end
else if tag=2 then
begin
Text:=DxtomoneyXx(str);
tag:=0;
end;
end;
end;
 
如果用的地方比较多的话,建议自定义输入控件,从原输入控件继承一个,增加属性OrgText,OnExit时将当前text保存为OrgText,调用小写转大写,更新text属性。
OnEnter时用OrgText属性的值更新text属性。
 
多人接受答案了。
 

Similar threads

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