RSS订阅 | 匿名投稿
您的位置:网站首页 > 组件 > 正文

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

作者:admin 来源: 日期:2017/12/15 18:25:03 人气: 标签:

执行这些代码,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

读完这篇文章后,您心情如何?
0
0
0
0
0
0
0
0
本文网址: