Я начинаю с нового приложения 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.