各位朋友,小弟的窗体有多个EDIT,其中一个EDIT是让用户输入数值的,小弟想让用户输入完数字之后,自动将EDIT显示的整数部分的数字每隔3个数字就用一个逗号来隔开,请问这个该怎样实现,请各位朋友赐教,谢谢!!!
例如:用户输入 12345678.12
当用户在EDIT框里面输入完上面的数值后,会马上显示  12,345,678.12又例如,用户输入:234567.33  
当用户在EDIT框里面输入完上面的数值后,会马上显示 234,567.33又例如,用户输入:1234.75 
当用户在EDIT框里面输入完上面的数值后,会马上显示 1,234.75就是说,假如整数部分超过3位数字,就会每3位数字前面加一个逗号上去,依此类推,诚心请各位朋友赐教,谢谢!!!

解决方案 »

  1.   

    就算有办法,你一样也要对这几百个窗体中的edit做处理,想以后省事,从根上做吧
      

  2.   

    楼上的各位大虾,因为小弟的很多函数和过程,都是指定了EDIT类的,所以很希望能继续用这个EDIT,
      

  3.   

    楼主的关键问题没有说:什么是“用户输入完数字”?是用户输入结束之后按回车呢?还是用户转移焦点就算输入完毕呢?或者用户输入到某一定的字符个数呢?不同的条件不同的编程方式不管以上这些条件,当输入完毕后,使用一函数分析Edit的字符串,将其处理成需要的格式再写回Edit就可以了至于为这几百个Edit增加事件处理,只需要写一过程,将你的“输入完”处理函数赋值给相应的Edit相应事件就可以了。
      

  4.   

    在unit中写一个写一个函数,这样可以用来调用!当需要变更的时候,直接在Uint单元中修改一下函数就可以了!而不要大费周章的去修改那么多EDIT
      

  5.   

    楼上的两位朋友,小弟就是这个意思啊,另外,还有一个问题,还需要一个配套的去掉逗号的函数,因为数据库设定这个字段是FLOAT型的,显示的时候是逗号,保存的时候,还要用多一个函数将这个豆号去掉,然后再写进去数据库,诚心希望各位大虾赐教,谢谢
      

  6.   

    另外,是所谓的用户输入完数字之后,就是当焦点离开该 EDIT的时候
      

  7.   

    进入edit时,把edit1.text的内容由123,456.78转为123456.78
    离开edit时,把edit1.text的内容由123456.78转为123,456.78程序运行后,自动扫描所有的edit,加上这2个事件
    取edit内容时,也要先把edit1.text的内容由123,456.78转为123456.78
    设置edit内容时,最后也要把edit1.text的内容由123456.78转为123,456.78
      

  8.   

     
     a:=StrToFloat(Edit1.Text);
     NewEdit1.Text:=FormatFloat('#,###.###',a);按这个试试
          
      

  9.   

    楼上的朋友的程序,是可行的,但是要处理N多的事件啊,还是没有找到完整的解决方案,好头疼啊 :)procedure TFrm_LC.Edit4Exit(Sender: TObject);
    var
      a: Double;
      tmp:string;begin
      inherited;
      a := StrToFloat(Edit4.Text);
      tmp := FormatFloat('#,###.###', a);
      edit4.Text := tmp;
    end;
      

  10.   

    17楼的朋友,为什么要设置成EXTENDED的啊?有啥不同的吗?
      

  11.   

       1、建议自编一个函数:
    MyFormatStr(S:string):string;
    begin
      MyFormatStr:=Format('#,###.###',s);
       
    end;   2、建议使用RX组件中的TCurrentEdit控件
       (1)值存入CurrentEdit1.Value;
       (2)显示格式通过设置DisPlayFormat;
       (3)如DisPlayFormat为‘¥,000,00元’,Value值为123456.78,
       显示 ¥123,412,345,678.97元
        
      

  12.   

    如DisPlayFormat为‘¥,000,00元’,Value值为123412345678.97, 
      显示 ¥123,412,345,678.97元 
        
      

  13.   

    1、直接修改掉TEdit源代码,包含在当前工程中。
    2、子类化
    3、使用D2010 的那个什么 类扩展
    在uses 该Unit后可直接使用
    type
      TDataSetHelper = class helper for TDataSet
        procedure Hello;//新增过程
        procedure Open;//直接覆盖原来的过程
      end;{ TDataSetHelper }procedure TDataSetHelper.Hello;
    begin
      ShowMessage('Hello');
    end;procedure TDataSetHelper.Open;
    begin
      ShowMessage('Open');
    //inherited SaveToFile (strFileName, TEncoding.UTF8);//也是可以的。
    end;
      

  14.   

    给你一个思路吧
    1、先定义一个函数,用FormatFloat函数实现你的功能
    2、在窗体的OnCreate事件中,遍历所有的控件,将你要处理的
    TEDIT类的OnExit指定为你写的函数,就OK了
      

  15.   

    自己定义的函数,要与TEDIT的OnExit原型相同
      

  16.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        procedure FormCreate(Sender: TObject);
      private
        procedure EdtExit(Sender: TObject);
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.EdtExit(Sender: TObject);
    begin
      (Sender as TEdit).Text :=  FormatFloat('#,0.00',StrToFloatDef((Sender as TEdit).Text,0));
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
        i:Integer;
    begin
      for   i:= 0   to   ComponentCount-1   do
      begin
        if   Components[i]   is   Tedit   then
        TEdit(Components[i]).OnExit := EdtExit;
      end;
    end;end.
      

  17.   

    如果是我就换控件,用ue之类的工具打开所有的pas和dfm,查找替换全部搞定
    否则,后患无穷啊