Ctrl+- (Ctrl+дефис-минус) как сочетание клавиш?

Может показаться естественным использовать Ctrl + +, Ctrl + - и Ctrl + 0 в качестве ярлыков для действий приложения по увеличению, уменьшению и восстановлению масштаба по умолчанию (обычно 100 %). Теперь в Delphi я могу назначать сочетания клавиш Ctrl + + и Ctrl + 0. Первый, однако, требует использования знака «плюс» основной части клавиатуры; знак плюс на цифровой клавиатуре использовать нельзя.

Проблема возникает, однако, когда я хочу назначить Ctrl + - в качестве ярлыка. Это просто не работает. Если я назначу "Ctrl+-" в IDE, значение, сохраненное в свойстве ShortCut, будет 16495. Если мы вычтем из этого ssCtrl, мы получим 111. Можно было бы предположить, что можно было бы присвоить ShortCut := 45 + ssCtrl или, что то же самое, ShortCut := Menus.ShortCut(45, [ssCtrl]), потому что ord('-') = 45. Но это не работает.

Однако я нашел рабочее решение: ShortCut := 189 + ssCtrl. Я выбираю 189, потому что это число, которое я получаю, когда нажимаю клавишу "-" и слушаю событие KeyDown.

Итак, почему я не доволен этим? Что ж, я боюсь, что константа 189 действительна только на шведских клавиатурах. Я попытался прочитать об этом, и, как обычно, документация MSDN довольно ясна, но кто знает, как Delphi справляется с вещами.


person Andreas Rejbrand    schedule 28.08.2010    source источник
comment
Совет: добавьте псевдоним для Ctrl+= для увеличения, иначе вам придется использовать Ctrl+Shift++ на клавиатурах без цифровой клавиатуры.   -  person Douglas    schedule 29.08.2010
comment
@Douglas: На моей клавиатуре я вставляю знак плюса, нажимая клавишу + (без Shift или ctrl+shift) прямо над P и Å (да, шведские клавиатуры выглядят так — 99.se/attachments/powerbook-macbook-pro/ ). Это также моя проблема: клавиши не одинаковы на разных клавиатурах.   -  person Andreas Rejbrand    schedule 29.08.2010


Ответы (3)


Код ключа 189 — это VK_OEM_MINUS в Windows.pas, поэтому ваше решение предназначено не только для шведов.

person Rob Kennedy    schedule 28.08.2010
comment
Большое Вам спасибо. Это было именно то, что я хотел услышать! - person Andreas Rejbrand; 29.08.2010

правильно использовать ярлык меню на цифровой клавиатуре:
CtrlNum + для [+]
Ctrl Num - для [-]

между Num + и Num - есть пробел

person Chuck    schedule 25.07.2011

Я не уверен, почему вы получаете 16495 для Ctrl + -. Когда я добавляю этот ярлык к действию, он дает мне 16573, и он отображается в меню как Ctrl + -, и этот ярлык работает.

Однако вы правы, что Menus.ShortCut(ord('-', [ssCtrl]) не работает. Он дает значение 16429 и отображается в меню как Ctrl + Ins, а Ctrl + Ins работает как ярлык.

Возможно, это проблема с Delphi 2009 и более поздними версиями, поскольку они добавили Unicode.

person lkessler    schedule 28.08.2010
comment
Приведение типа Word эквивалентно функции Ord, которую он уже пробовал. - person Rob Kennedy; 29.08.2010
comment
Да, но он не хочет жестко кодировать 45. В то время как это позволяет персонажу, которого он хочет. Я не уверен, почему он говорит, что это не работает на его машине. Либо 45, либо Word('-') работают на меня. - person lkessler; 29.08.2010
comment
О, теперь я вижу его проблему. Функция ShortCut не работает. Мне придется изменить свой ответ. - person lkessler; 29.08.2010