您的位置:首页 > 其它

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

2017-05-21 12:55 363 查看
执行这些代码,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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐