Как создать TMenuItem в FMX с ярлыком в виде цифровой клавиши или /-клавиши?

#delphi #firemonkey

#delphi #firemonkey

Вопрос:

Я пытаюсь воспроизвести что-то похожее на ярлыки Inkscape Zoom, показанные ниже. Обратите внимание, что эти ярлыки Inkscape работают независимо от того, используется цифровая клавиатура или нет.

изображение

Первая проблема заключается в том, что установка сочетаний клавиш с помощью инспектора объектов невозможна, поскольку для этих клавиш нет никаких опций самостоятельно без клавиш-модификаторов. Затем я попытался установить ярлыки во время выполнения, как показано ниже. Это показывает номера ярлыков в меню, но ярлыки не работают. Я нажимаю цифровую клавишу, и ничего не происходит, независимо от того, используется ли num pad (пункты меню работают, если я их нажимаю). Ярлыки и - также не работают.

Другая проблема заключается в том, что - ярлык '-' по какой-то причине отображается как в меню, а ярлык отображается как '=' , потому что это тот же ключ. Я также пытался использовать TextToShortcut() , но безуспешно.

Возможно ли это в FMX, или мне придется прибегнуть к использованию функциональных клавиш? Я бы предпочел иметь согласованность с Inkscape. Я мог бы обрабатывать нажатия клавиш в OnKeyDown событии формы, но тогда как бы я правильно отображал сочетания клавиш в меню (правая часть пункта меню)?

 MenuItem1.ShortCut := vkEqual;
MenuItem2.ShortCut := vkMinus;
MenuItem3.ShortCut := vk1;
MenuItem4.ShortCut := vk2;
MenuItem5.ShortCut := vk5;
MenuItem6.ShortCut := vk3;
MenuItem7.ShortCut := vk4;
 

Комментарии:

1. Я думаю, что я сам ответил на часть этого. Я могу установить текст ярлыка в пункте меню, используя символ табуляции. MenuItem1. Текст:= MenuItem1. Текст #9 ‘ ‘. Затем я могу обработать выполнение ярлыка в событии FormKeyDown. Тем не менее, я все же хотел бы знать, можно ли настроить эти ярлыки так, чтобы они работали автоматически.

2. Вы пробовали vkAdd для и vkSubtract для - ? См. раздел Представление клавиш и сочетаний клавиш

3. Да, они представляют клавиши цифровой клавиатуры, но они все равно не работают. Теперь я решил проблему, как я описал выше. Похоже, что нет альтернативы обработке ключевых событий в FormKeyDown.

Ответ №1:

Вы можете сделать это из исходного кода :

 item1.ShortCut := 8299;
 

Вы получаете эффект, как на картинке

Потому что ярлык TMenuItem имеет TShortCut, и это
TShortCut = Low(слово)..High (слово);

это простая сумма key и Fkey :

 Shift - 8192 

Ctrl - 16384

Alt - 32768


So we have 8299 = 
"numpad  " = 107  
Shift = 8192
 

Для использования » » и «Числовой » используйте действие, связанное с пунктом меню:

 procedure TForm1.FormCreate(Sender: TObject);
begin
  Action1.Caption := 'Click' #9 ' ';
  Action1.SecondaryShortCuts.Add('Shift =');
  Action1.SecondaryShortCuts.Add('Num  ');
end;
 

с наилучшими пожеланиями
Moskw@

Комментарии:

1. Спасибо, но я не хочу shift, просто .

2. элемент1. Ярлык:= 107; или item1. Ярлык:= vk_Add

3. Это то, что я уже пробовал, но ярлык просто не работает. В любом случае, теперь я решил эту проблему, обработав нажатие клавиши в FormKeyDown.

4. Это работает. Вам нужно просто добавить элемент1. Ярлык:= 107; в onCreate() или в том месте, где / когда это необходимо. Я отправил ответ с картинкой, но он был удален модератором (почему?).

5. Я хотел, чтобы сочетание клавиш работало при использовании цифр или / — с помощью клавиатуры с цифрами ИЛИ обычных клавиш клавиатуры (не на всех клавиатурах ноутбуков есть клавиатура с цифрами). Я не думаю, что ваш ответ работает для обоих. Я не знаю, почему он был удален. Я думаю, что единственное решение — это то, как я это сделал, и оно работает нормально.