码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-05-20 09:59:56      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:.text   log   cas   paste   code   mcr   小数   小数点   clip   

执行这些代码, 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只能输入数字,小数点和负号,负号和小数点只能输入一个,负号必须在最前,粘贴的数字必须完全正确.

标签:.text   log   cas   paste   code   mcr   小数   小数点   clip   

原文地址:http://www.cnblogs.com/CodeGear/p/6881181.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!