我已经设置了edit,让它只能输入数字和小数点,但是没办法让它自动增加千分符,
如果能够在输入完成之后变成千分位格式,那也行,
请教各位,在DELPHI里能否实现这个?
如输入:1234567,希望它变成:1,234,567
不过,当把这个edit存入数据库时,它仍然按照1234567存入,加上千分符也不知道它能不能识别
在论坛上得到了很多帮助,先谢谢大家了

解决方案 »

  1.   

    raize里面有一个控件 可以达到你的效果
      

  2.   

    既然是edit那么存入的就是字符串,如果想改变其内容又想保留原始结果需要自己写代码处理字符串或者用个临时变量存储改变前的int内容,另外1234567,希望它变成:1,234,567这问题记得很多人问过了
    http://topic.csdn.net/u/20090402/13/ddcd4364-9862-49b8-96f2-f337854bc8e4.html
      

  3.   

    您好,我已经安装了raize5.5,请问那个控件是maskedit吗,该怎么设置?
      

  4.   

    Edit2.text := formatfloat('#,###.##',123323.23);
     http://hi.baidu.com/bakyman/blog/item/5f6fb08b743f61e3f11f364b.html
      

  5.   

    procedure TForm1.Edit1Enter(Sender: TObject);
    begin
    Edit1.text:= formatfloat('####.#######',strToFloat(stringreplace(Edit1.text,',','',[rfReplaceAll])));
    end;procedure TForm1.Edit1Exit(Sender: TObject);
    begin
    Edit1.text := formatfloat('#,###.#######',strToFloat(Edit1.text));
    end;自己再判断一下,Edit1有没有内容或者是不是数字
      

  6.   

    在edit的enter里把数据的千分位去掉
    exit里给数据加上千分位
      

  7.   

    感谢你的热情回复,测试显示完全符合我的要求:
    可是,如果我的数据没有小数,只有整数,数据库里字段也是整数,该怎么写呢?
    有formatint这种函数吗?
      

  8.   


    procedure TFinput_ZZ.btnSaveClick(Sender: TObject);
    var firstNum :single;begin   firstNum := (formatfloat('####.##',strToFloat(stringreplace(Edtnh.text,',','',[rfReplaceAll]))))*1000;  
    \\这句运行后出错:incompatible types 'string' and 'integer'请问这个错误:这句运行后出错:incompatible types 'string' and 'integer'
    请问该怎么改,说是类型错误 
      

  9.   

    formatfloat一样适用整数的,#是有就显示,没有就不会显示,自动处理的
    自己测试一下,随便输几个数字看看结果(整数,负数,小数都行)
      

  10.   

    保存的时候,要把逗号去掉
    formatfloat返回的结果是string类型,怎么能跟1000再相乘呢?firstNum:=StrToFloat(stringreplace(Edtnh.text,',','',[rfReplaceAll]))*1000
      

  11.   

    function IntFormat(intValue: string): string;
    begin
    //
      if intValue = '' then
        Result := ''
      else
      begin
        intValue := StringReplace(intValue, ',', '', [rfReplaceAll]);
        intValue := StringReplace(intValue, ',', '', [rfReplaceAll]);
        Result := formatfloat('#,###,##0', StrToFloat(intValue));
      end;
    end;function FloatFormat(floatValue: string): string;
    var
      decPart, intPart: string;
      i, j: Integer;
      numFormat: string;
    begin
    //
      if floatValue = '' then
        Result := ''
      else
      begin
        floatValue := StringReplace(floatValue, ',', '', [rfReplaceAll]);
        floatValue := StringReplace(floatValue, ',', '', [rfReplaceAll]);
        floatValue := Format('%.*n', [18, StrToFloat(floatValue)]); //小数点后18位,没办法再加了,到20的话,超出了
        i := pos('.', floatValue);
        if i > 0 then //有小数点
        begin
          intPart := Copy(floatValue, 1, i - 1);
          decPart := copy(floatValue, i + 1, Length(floatValue));
          //从后边开始清除0
          for j := Length(decPart) downto 1 do
          begin
            if decPart[j] = '0'
              then Delete(decPart, j, 1)
            else
              Break;
          end;
        end
        else //无小数点
        begin
          intPart := floatValue;
          decPart := '';
        end;    if decPart <> '' then
          Result := intPart + '.' + decPart
        else
          Result := intPart;
      end;
    end;
    记得在保存的时候把,号全部给替换掉。输出的时候,用intformat或者floatformat即可。              if (tmpEdit.Text <> '') then
                    if (ColObject.T_COL_SJLX in [ftFloat, ftCurrency, ftFMTBcd, ftBCD]) then
                    begin
                      tmpEdit.Text := FloatFormat(tmpEdit.Text);
                    end
                    else if (ColObject.T_COL_SJLX in [ftDate, ftDateTime]) then
                    begin
                      tmpEdit.Text := DateFormat(tmpEdit.Text);
                    end
                    else if (ColObject.T_COL_SJLX in [ftLargeint]) then //旧表移植时发现还需要增加BigInt的处理
                      tmpEdit.Text := intFormat(tmpEdit.text);
                end;
      

  12.   

    成功,感谢KAIKAI(开开一心)的热心回答,谢谢您!
    也谢谢大家的回复