我想做一个计算器,其中的小数点怎么也解决不掉,一般的小数点不是只能用一次吗,我怎么让它实现这个功能 啊 ,还有,怎么设置让EDIT只接受数字啊
解决方案 »
- 如何处理“主键重复”异常?
- SQL求助传递参数查询最大值
- 问个比较菜的问题 :unit文件的结构
- 没声音,再好的戏也出不来!--求教Delphi7中Beep的用法?
- 关于在richedit里面实现对齐方式
- 如何使图片平铺在窗口中作为窗口背景?
- 我把图片从数据库中读到了Image1上,怎样打印出来这副图片----100分
- BDE连接ORACLE数据库后,控件query却不可用insert或edit进行插入操作?requeslive已设为true.sql server数据库时可以.
- 哈哈哈哈~~~明天农历生日!
- For Delhpi 5的控件可以安装到delphi6吗?
- 要求在ShellTreeView中打开文件的快捷方式,急,在线等!!!
- ado中如何获取数据库字段的默认值?
procedure TForm1.小数点Click(Sender: TObject);
begin
if 小数点.tag = 0 then
begin
Edit.Text := Edit.Text + '.';
小数点.tag := 1;
end;
end;小数点.tag := 0; // 当要求输入数字时怎么设置让EDIT只接受数字啊?
RE: 可改用 TMaskEdit, 具体看帮助。
或者相应 TEdit 的 OnChange 事件。(注意,只响应 OnKeyXXXX 事件在其中屏蔽
非数字键的话,用户可能会“粘贴”进非数字字符。)
var
s:set of char;
i:integer;
// Str, Text: string;
begin
s:=['.',#8,'0'..'9'];
If Key = #8 Then exit;
i:=pos('.',edit1.text);
if i>0 then
s:=s-['.'];
if (i>0)and(i=length(TEdit(Sender).text)-2) then //可任意控制-2,-3....
begin
key:=#0;
exit;
end;if not (Key in s)then
begin
Key := #0;
Exit;
end;{//控制输入数字的大小
if TEdit(Sender).SelLength > 0 then
begin
Text := TEdit(Sender).Text;
Str := Copy(Text, 1, TEdit(Sender).SelStart - 1) + Key +
Copy(Text, TEdit(Sender).SelStart + TEdit(Sender).SelLength + 1, Length(Text));
i := StrToInt(Str);
if i > 59 then
begin
Key := #0;
Exit;
end;
end
else if StrToInt(TEdit(Sender).Text + Key) > 59 then
begin
Key := #0;
Exit;
end;}
end;
var
fstyle: dWord;
begin
fstyle := GetWindowLong(Edit1.Handle, GWL_STYLE);
SetWindowLong(Edit1.Handle, GWL_STYLE, fstyle or ES_NUMBER)
end;
if ((key='.')or(key in [0..9])or(key=#13)or(key=vk_back)) then
begin
if ((key='.')and count=0) then inc(count) else showmessage..../如果第一次出现则count加一,否则提示。。
这里有一个问题就是会屏蔽其他的键,不过计算器也不用ctrl+v这些。
还有就是我用strtofloat(edit1);这里不知道能不能顺利的把小数点也转换过去。我再试试
不知道楼主有没有看懂楼上的方法。我有几个地方不理解,再仔细研究一下
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
value: double;
begin
if not(TryStrToFloat(Edit1.Text + Key, value)) and(Key <> #8)then
Key := #0;
end;