关于FORM的Keypreview问题(50分)

  • 主题发起人 主题发起人 wgdelphi
  • 开始时间 开始时间
W

wgdelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个FORM中将KEYPREVIEW属性设为TRUE后,通过FORM的OnShortCut事件统一处理FORM的按键,但此时FORM上的一些按钮的快捷键,如ALT+s等均无效了
附注:
刚打开此窗体时按钮的快捷键仍有效,但当光标移入任一输入控件(如EDIT控件)后各个按钮的快捷键全部会失效
请问各位大虾如何才能解决此问题?
 
对各控件的按键事件统一调用一个自定义过程
该过程将键盘消息发送到FORM的键盘事件上
 
能给出一些示例代码吗,主要针对当光标在任一个EDIT控件中时如何让BUTTON的快捷键Alt+S或Alt+任意键起作用,最后全部由FORM的OnShortcut事件来处理
 
你的事件处理可能有问题。
 
您将FORM中的KEYPREVIEW属性设为TRUE,在FORM窗体中的FormKeyDown事件中捕捉ALT键
If Shift<>[ssAlt] Then
ShowMessage('cccc');
当键盘中ALT+组合键时不提示CCCCC,如果不在ALT时,按任意键将提示CCCCCCC

Shift = (ssShift, ssAlt, ssCtrl,ssLeft, ssRight, ssMiddle, ssDouble);

 
还是截获onMessage消息比较有保证。。
Keypreview不好用的。。
 
我是指FORM.KEYPREVIEW=TRUE且当光标在任一EDIT框中时我按了任一BUTTON的快捷键,此时如何让系统自动处理该热键,
因为每个BUTTON的CAPTION上定义的热键都不同,我不可能去用固定代码判断是按的ALT+S或ALT+T之类的按键值呀,那样程序就没通用性了
例如: button1.caption='(&amp;O)K';
button2.caption='(&amp;C)ancel';
如何让系统象在FORM.KEYPREVIEW为FALSE一样的自动处理相应热键呢?另外,我还要判断当光标在DBGRID中时是否按下了VK_UP,VK_DOWN键,
而用keypress事件是无法判断这两个键值的,只能用FORM.OnShortCut事件判断,所以请回答者注意此问题
 
还有 KeyDown 和 KeyUp
 
多人接受答案了。
 
后退
顶部