请问怎么判断按下了Ctrl+Enter?

就像OICQ发送信息的按键。
[14 byte] By [fosil-改造人] at [2008-6-10]
# 1
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssctrl in shift)and(key=13) then
showmessage('asdf;')
end;
ssl2000-大宋 at 2007-10-22 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 2
onkeydown
if (key=13) and (shift=ssCtrl)then
send('aa');
3yugui-亿硅 at 2007-10-22 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 3
应该是
if (key=13) and ([ssCtrl]=shift) then
showmessage('aa');
这样可以屏蔽ctrl+alt+Enter
3yugui-亿硅 at 2007-10-22 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 4
这样不行啊,
如果窗口上的其他空件拥有焦点,
按下Ctrl+Enter就不会触发FormKeyDown时件。
我是想无论哪个空件拥有焦点,按下Ctrl+Enter时都能判断到。
还有其他办法吗?
fosil-改造人 at 2007-10-22 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 5
利用 ssl2000(大宋) 的代码,

还有一个关键的步骤
设定 form的KeyPreview 为 true,就行了,否则没用。
# 6
那就截获消息
、定义捕获Windows消息WM_HOTKEY的钩子函数,即:
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
2、向Windows加入一个全局原子 Myhotkey: GlobalAddAtom('MyHotkey'),
并保留其句柄。
3、向Windows登记热键:调用API函数RegisterHotKey实现。
rocktan-我是一条狗 at 2007-10-22 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 7
pazee(耙子) 说得对
加上form.keypreview:=true;就ok了。
ssl2000-大宋 at 2007-10-22 > top of Msdn China Tech,Delphi,VCL组件开发及应用...
# 8
用定义热键的方法不是很好,
假如在用QQ的发消息窗口来写消息的时候还没有写完就
把焦点转向其他程序,如果不小心按下了Ctrl+Enter,
就会发送消息,这显然不是用户的本意。

而按照ssl2000(大宋)的方法设定form的KeyPreview 为true
问题就解决了。

非常感谢大家的帮助!
fosil-改造人 at 2007-10-22 > top of Msdn China Tech,Delphi,VCL组件开发及应用...