执行这些代码, Edit1只能输入数字,小数点和负号,负号和小数点只能输入一个,负号必须在最前,粘贴的数字必须完全正确.

Posted CodeGear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行这些代码, Edit1只能输入数字,小数点和负号,负号和小数点只能输入一个,负号必须在最前,粘贴的数字必须完全正确.相关的知识,希望对你有一定的参考价值。

执行这些代码, Edit1只能输入数字,小数点和负号,负号和小数点只能输入一个,负号必须在最前,粘贴的数字必须完全正确.

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;
-----------

 

以上是关于执行这些代码, Edit1只能输入数字,小数点和负号,负号和小数点只能输入一个,负号必须在最前,粘贴的数字必须完全正确.的主要内容,如果未能解决你的问题,请参考以下文章

c# 如何让textbox只能输入数字和小数

请问如何通过Delphi编程,做到一个输入框中,只能输入汉字,而不能输入数字或其他字符?

C#中如何限制Textbox控件中只能输入数字,要能用退格的

怎么让输入框只能输入数字和小数点?

js判断只能输入数字或小数点

超级简单的DELPHI问题,取小数位