限制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;
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;
相关文章推荐
- *Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字,还有Object Inspector之组件属性的介绍)
- 限制只能输入数字、负号、小数点。支持退格删除
- MFC控件edit封装,只能输入数字、负号、小数点
- mfc现实edit控件输入限制(只能输入数字和小数点)
- 怎样限制Edit只能输入数字(包括有小数点的数字)
- 用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
- 限制TEdit 内只能输入数字
- js正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
- VC限制只能输入常规数字的CEdit控件
- js正则表达式限制文本框只能输入数字,小数点,英文字母
- 限制文本框只能输入数字和小数点格式
- 用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
- 用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
- 如何限制文本框只能输入数字,小数点,英文,汉字等各类代码(转载)
- js正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
- 限制 TEdit 只能接收 数字 输入...
- 用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
- 限制文本框只能输入数字,小数点,英文字母,汉字
- [转]用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
- js正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码