我从一个新的Delphi VCL应用程序开始,将Menus添加到uses子句,在表单上放一个标签,并指定表单的OnShortCut事件:
procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
Label1.Caption := ShortCutToText(ShortCut(Msg.CharCode, KeyDataToShiftState(Msg.KeyData)));
end;
在XP上,这适用于我尝试过的所有快捷键组合,包括 Shift + Ctrl + 0 。在Vista和Windows 7上,测试应用程序显示 Shift + Ctrl + 1 到 Shift + Ctrl + 9 ,但不是 Shift + Ctrl + 0 。其他组合,如 Shift + 0 , Ctrl + 0 ,甚至 Shift + Ctrl + Alt + 0 显示正常。
在调试器下运行应用程序,我发现如果 Shift 和 Ctrl ,则永远不会使用Msg.CharCode = Ord('0')触发OnShortCut事件按下 0 键时按住键。
Delphi IDE在Vista下也存在同样的问题。 Ctrl + Shift + 1 设置书签1,但 Ctrl + Shift + < kbd> 0 没有设置书签0,它应该。
我已经使用Delphi 2007和2010在Windows Vista和7的原始安装上测试了这一点,因此没有第三方软件捕获密钥。我没有尝试过任何其他开发工具来确定问题是Delphi还是Vista本身。
答案 0 :(得分:15)
Shift + Ctrl + 0 在Vista中预先分配给输入法编辑器(IME):
http://support.microsoft.com/kb/967893
这将解决您的问题,但会影响IME的用户(主要是亚洲版本),因此您应该考虑不使用此快捷方式。
答案 1 :(得分:3)
看来你不是第一个问这个的人,我在How-To Geek论坛上发现了this帖子。
然后我找到了this MS知识库文章:
“输入法编辑器键盘快捷键( CTRL + SHIFT + 0 )在Vista中切换输入语言”
用于在语言之间切换。有一种解决方法可以关闭它。我刚尝试了它并且它可以工作,应用程序现在识别 Ctrl + Shift + 0 。
答案 2 :(得分:3)
尝试旧学校 Ctrl + K Ctrl + 0 设置书签0。