关于在TEDIT中实现诸如计算器中的数字分组输入,如“1234”,应该显示成“1,234”,并且希望输入时实时调整分组(200分)

P

pengq

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Edit2Change(Sender: TObject);
var
str:string;
strn:string; //用于保存从分组中去掉','而分离出的数字 如1,234 变成1234
i:integer;
m:integer;//分组的长度,包括 ','的长度
begin

str:=edit2.Text ;
m:=length(str);
if str <> str_sep then
begin
strn:='';
if m <= 4 then strn:=str //光标在右边
else if m > 5 then //光标在最左边
begin
for i:=2 to length(str) do
if str<>',' then strn:=strn+ str ;
strn:=strn+str[1]; //把刚才从最左边输入的数字移到最右边
end;
str_sep:= format('%1.0n',[strtofloat(strn )*1.0]); //str_sep 全局变量

end;
edit2.text:=str_sep;

end;
我是这样实现的,发现一个问题就是输三位数字的时候,光标是从左到右,输第5位时,光标就一直停留在最左边,所以程序需要判定大于5时要把在光标处输入的数字换到右边,重新FORMAT,这样才能基本达到要求,但是也不全部满意,因为光标都在最左边,请问各位还有别的方法吗?另外TEDIT中能让其文本右对齐吗?谢谢!
 
RzNumericEdit控件具有你说的这个功能,是RZ控件,自己在网上下一个
 
var
str:string;
begin
str := StringReplace(edit2.Text,',','',[rfReplaceAll]);
edit2.Text := format('%1.0n',[strtofloat(str )*1.0]);
edit2.SelStart := Length(edit2.Text);
end;

这样就可以了
 
太感谢“来如风”了,你太牛了![:)]
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
604
import
I
I
回复
0
查看
571
import
I
顶部