我想做一个计算器,其中的小数点怎么也解决不掉,一般的小数点不是只能用一次吗,我怎么让它实现这个功能 啊 ,还有,怎么设置让EDIT只接受数字啊

解决方案 »

  1.   

    只让按一次小数点:
    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 事件在其中屏蔽
        非数字键的话,用户可能会“粘贴”进非数字字符。)
      

  2.   

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    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;
      

  3.   

    如果不用小数,就用下面的方法:
    var
     fstyle: dWord;
    begin
     fstyle := GetWindowLong(Edit1.Handle, GWL_STYLE);
     SetWindowLong(Edit1.Handle, GWL_STYLE, fstyle or ES_NUMBER)
    end;
      

  4.   

    如果单纯判断输入数字或小数点我做的是在Edit1KeyPress加入判断
    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);这里不知道能不能顺利的把小数点也转换过去。我再试试
    不知道楼主有没有看懂楼上的方法。我有几个地方不理解,再仔细研究一下
      

  5.   

    不考虑“粘贴”的话
    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;