DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jeff1314
今日帖子: 10
在线用户: 12
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 mit (.﹎筷樂) ★☆☆☆☆ -
普通会员
2017/5/18 23:04:44
标题:
Tedit的OnKeyPress只能输入数字但还想使用ctrl+v怎么办? 浏览:1150
加入我的收藏
楼主: Tedit的OnKeyPress只能输入数字但还想使用ctrl+v怎么办?

使用组合键粘贴的时候先判断是否全为数字,如果是的话就粘贴上,如果不是就提示一下只能输入数字。

怎么搞?谢了!
----------------------------------------------
-
作者:
男 oldsnake (oldwang) ★☆☆☆☆ -
盒子活跃会员
2017/5/19 10:25:12
1楼: 两个思路:
A、拦截ctrl+v消息,在消息处理里对粘贴板的内容进行边界检查。
B、在Tedit的OnChange里进行边界判断。
----------------------------------------------
-
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2017/5/19 10:37:59
1楼: 执行这些代码, 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;
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 mit (.﹎筷樂) ★☆☆☆☆ -
普通会员
2017/5/20 16:27:35
2楼: 谢谢以上两位提供思路和代码🙏
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2017/5/22 9:24:08
3楼: TEdit 组件不是有个 NumbersOnly 属性吗?
----------------------------------------------
武汉天气不好
作者:
男 mit (.﹎筷樂) ★☆☆☆☆ -
普通会员
2017/5/23 6:44:13
4楼: if TWMCHAR(Message).CharCode in [48..57, 8, 3] then
为什么不加3这个ascii码就无法使用ctrl c和ctrl v快捷键了呢?
3是文本结束好像跟这个也没多大关系吧,不明白,请赐教!谢谢
----------------------------------------------
-
作者:
男 mit (.﹎筷樂) ★☆☆☆☆ -
普通会员
2017/5/23 16:36:09
5楼: 噢,明白了~谢谢,3表示的是ctrl+c
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行164.0625毫秒 RSS