请问怎么判断按下了Ctrl+Enter?
就像OICQ发送信息的按键。
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssctrl in shift)and(key=13) then
showmessage('asdf;')
end;
onkeydown
if (key=13) and (shift=ssCtrl)then
send('aa');
应该是
if (key=13) and ([ssCtrl]=shift) then
showmessage('aa');
这样可以屏蔽ctrl+alt+Enter
这样不行啊,
如果窗口上的其他空件拥有焦点,
按下Ctrl+Enter就不会触发FormKeyDown时件。
我是想无论哪个空件拥有焦点,按下Ctrl+Enter时都能判断到。
还有其他办法吗?
利用 ssl2000(大宋) 的代码,
还有一个关键的步骤
设定 form的KeyPreview 为 true,就行了,否则没用。
那就截获消息
、定义捕获Windows消息WM_HOTKEY的钩子函数,即:
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
2、向Windows加入一个全局原子 Myhotkey: GlobalAddAtom('MyHotkey'),
并保留其句柄。
3、向Windows登记热键:调用API函数RegisterHotKey实现。
pazee(耙子) 说得对
加上form.keypreview:=true;就ok了。
用定义热键的方法不是很好,
假如在用QQ的发消息窗口来写消息的时候还没有写完就
把焦点转向其他程序,如果不小心按下了Ctrl+Enter,
就会发送消息,这显然不是用户的本意。
而按照ssl2000(大宋)的方法设定form的KeyPreview 为true
问题就解决了。
非常感谢大家的帮助!