delphi 限制TEdit控件只能输入数字,小数点和负号


本文整理自网络,侵删。

 

执行这些代码,Edit1只能输入数字、小数点和负号,负号和小数点只能输入一个,负号必须在最前,粘贴的数字必须完全正确,不能以限制Ctrl_V的使用为前提。


type

  TForm1 = class(TForm)

    Edit1: TEdit;

    procedure FormCreate(Sender: TObject);

  private

    Edit1OldProc: TWndMethod;

    procedure Edit1NewProc(var Message: TMessage);

  public

    { Public declarations }

  end;


var

  Form1: TForm1;


implementation


{$R *.dfm}


uses Clipbrd;


procedure TForm1.FormCreate(Sender: TObject);

begin

  Edit1OldProc := Edit1.WindowProc;

  Edit1.WindowProc := Edit1NewProc;

end;


procedure TForm1.Edit1NewProc(var Message: TMessage);

var

  s: string;

  v: double;

begin

  case Message.Msg of

    WM_PASTE:

      begin

        s := Clipboard.astext;

        s := copy(edit1.Text, 0, edit1.SelStart) + s + copy(edit1.Text, edit1.SelStart + edit1.SelLength, length(edit1.Text));

        if trystrtofloat(s, v) then

          Edit1OldProc(Message)

        else

          ShowMessage('只允许输入数字');

      end;

    WM_CHAR:

      begin

        if (TWMCHAR(Message).CharCode = 45) then

          if (Pos('-', Edit1.Text) = 0) and (Edit1.SelStart = 0) then

          Edit1OldProc(Message);

        if (TWMCHAR(Message).CharCode = 46) then

          if (Pos('.', Edit1.Text) = 0) then

          Edit1OldProc(Message);

        if TWMCHAR(Message).CharCode in [48..57, 8, 3] then

          Edit1OldProc(Message);

        if (TWMCHAR(Message).CharCode = 22)  then

          Edit1OldProc(Message);

      end;

  else

    Edit1OldProc(Message);

  end;

end;


来源:http://blog.csdn.net/xieyunc/article/details/72597827

相关阅读 >>

Delphi fdconnection执行sql execsql

Delphi 数组复制利用copymemory 最为完美

Delphi 删除或清除tstringgrid中的行

Delphi外挂编写

Delphi 汉字转十六进制的函数,可以互转不乱码

Delphi中判断操作系统是否是windows7

Delphi 如何刷新文件图标

Delphi android 获取通�记录

Delphi监控指定进程防止被关闭

Delphi 字符串去掉最后一个字符

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    正在狠努力加载,请稍候...