为什么截取不到WM_KEYDOWN消息?

charlze 2005-08-17 08:41:53
type
TForm1 = class(TForm)
……
protected
procedure WndProc(var Message: TMessage);override;
……

procedure TForm1.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_KEYDOWN then
showMessage('key pressed')
else
inherited;
end;

在showMessage处设置断点,发现截取不到WM_KEYDOWN消息,但是把WM_KEYDOWN换为WM_MOUSEMOVE却可以执行showMessage,这是什么原因呢?
谢谢!
...全文
193 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hexenzhou 2005-08-20
  • 打赏
  • 举报
回复
Edit 有个OnKeyPress的事件,你在这个事件中写代码截取吧!
charlze 2005-08-20
  • 打赏
  • 举报
回复
PASSWORD输入方式要求所有输入的字符统一显示为另一个字符,这一点不满足要求,例如输入“1”时显示“#”,输入2时显示“%”;
对于OnKeyPress事件,不论你在这个函数中写什么,编译器都会在执行完你的代码后再在文本框中显示“1”,这种方法麻烦的地方就在于如何才能不让编译器将“1”显示出来
fjwolf 2005-08-20
  • 打赏
  • 举报
回复
TO: charlze(我想我是海) ,如果仅为了将显示换为“#”,也就是PASSWORD输入方式,建议你继承EDIT,这样可靠安全。
linzhengqun 2005-08-19
  • 打赏
  • 举报
回复
TForm1.KeyPreview := True;
charlze 2005-08-19
  • 打赏
  • 举报
回复
确实是这个原因,删掉form上的控件就可以了,但是我现在要让一个Edit控件对键盘输入做出响应,比如用户在文本框中输入“1”时显示“#”,而不再出现“1”,感觉只能用截取WM_KEYDOWN消息重写的方法,这样一来就不能删掉Edit控件了,不知道用什么方法可以实现这个功能?
谢谢!
亮剑_ 2005-08-17
  • 打赏
  • 举报
回复
同样楼上的,应该是消息被FORM上面的控件截掉了
merkey2002 2005-08-17
  • 打赏
  • 举报
回复
你界面上肯定放有其它可视化控件吧,比如edit,button.
焦点在edit上,WM_KEYDOWN是edit的,不是form

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧