delphi负数变正数_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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值