Комбинация клавиш Shift + Ctrl + 0, не видимая приложением в Windows Vista
Я начинаю с нового приложения Delphi VCL, добавляю Menus к предложению uses, бросаю метку в форме и назначаю форму OnShortCut event:
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 отображаются в порядке.
Запустив приложение в отладчике, я обнаружил, что событие OnShortCut никогда не запускается с Msg.CharCode = Ord ('0'), если клавиши Shift и Ctrl удерживаются нажатием клавиши 0.
У Delphi IDE есть такая же проблема в Vista. Ctrl + Shift + 1 устанавливает закладку 1, но Ctrl + Shift + 0 не устанавливает закладку 0, что и должно быть.
Я тестировал это с Delphi 2007 и 2010 на девственных установках Windows Vista и 7 в VMware, поэтому нет стороннего программного обеспечения, удерживающего ключи. Я не пробовал другие инструменты разработки, чтобы определить, есть ли проблема с Delphi или с самой Vista.
Ответы
Ответ 1
Shift + Ctrl + 0 предварительно назначается в Vista редактору методов ввода (IME):
http://support.microsoft.com/kb/967893
Это решит вашу проблему, но повлияет на пользователей IME (в основном на азиатские версии), поэтому вам не стоит использовать этот ярлык.
Ответ 2
Кажется, вы не первый, кто спросил об этом, я нашел этот поток на форумах How-To Geek.
Затем я нашел this Статья базы знаний MS:
"Ярлык клавиатуры редактора методов ввода (CTRL + SHIFT + 0) переключает язык ввода в Vista"
Используется для переключения между языками. Существует обходной путь, чтобы отключить это. Я просто попробовал, и он работает, приложение теперь распознает CTRL + SHIFT + 0.
Ответ 3
Попробуйте старую школу Ctrl + K Ctrl + 0, чтобы установить закладку 0.