当前位置:主页>仓库管理软件> 列表

关于TEDIT的使用 找财务软件有哪些

销售管理软件版1楼: 我希望TEDIT控件能象计算机附件中自带计算器的输入框一样,只能输入数字,输入字母则无效,并且输入的整数能够分组,如30987显示是30,987.4056898则显示为4,056,898.[:)]请问各位大侠如何实现?关于只能输入数字的目标,我在TEDIT的 onkeyup onkeypress,onkeydown中判断好像都无效,敬请指教!

2楼: 无效?不可能吧,
你咋判断的? 如管家婆软件

3楼: function SZ(const S: string): boolean;
var
i: integer;
begin
Result := False;
for i := 1 to length(S) do
begin
if not (S[i] in [''0''..''9'']) then
begin
if not (S[i] in [''.''..''.'']) then
begin
showmessage(''只能输入数字!'');
Result := False;
exit;
end
else
begin
Result := True;
end;
end
else
begin
Result := True;
end;
end;
end;
这个函数可以控制TEDIT控件只能输入数字,分位你自己解决吧,很容易的。

4楼: procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in [''0''..''9'']) then key:=#0;
end;

5楼: 可以用format函数
Format(''this is %n'',[4552.2176]);
返回的是this is 4,552.22
你查查帮助

6楼: 我所用的是skyccf的方法
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var str:string;
begin
str:=edit1.text;
if not (key in [''0''..''9'']) then edit1.text:=str;
end;
这样先把edit1的值存起来再看是否输入数字才让其显示,好像不行,我一会试skyccf的 key:=#0;
另外我希望的是实时检测edit1的输入,而LFCZ的方法时输入完了再检测,分组也一样需要实时的,请继续指教,谢谢

销售管理软件版7楼: 用SetWindowLong即可完成输入的限制:

procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER);
end;

在OnExit和OnEnter事件中,利用Tag属性完成文本信息的转化:

procedure TForm1.Edit1Exit(Sender: TObject);
begin
with TEdit(Sender) do
begin
Tag:=StrToInt(Text);
Text:=Format(''%n'',[Tag*1.0]);


end;
end;

procedure TForm1.Edit1Enter(Sender: TObject);
begin
with TEdit(Sender) do
Text:=Format(''%d'',[Tag]);
end;

8楼: 用MaskEdit吧

9楼: if not (key in [''0''..''9'', ''.'']) then //不想支持小数的话,点号也不要了
Key:= #0

10楼: 建议不用Tedit,改用TMaskEdit控件

11楼: 收

12楼: 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[i]<>'','' then strn:=strn+ str[i] ;
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中能让其文本右对齐吗?谢谢! 如财务软件有哪些

13楼: [:(]