#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. Я хотел, чтобы сочетание клавиш работало при использовании цифр или / — с помощью клавиатуры с цифрами ИЛИ обычных клавиш клавиатуры (не на всех клавиатурах ноутбуков есть клавиатура с цифрами). Я не думаю, что ваш ответ работает для обоих. Я не знаю, почему он был удален. Я думаю, что единственное решение — это то, как я это сделал, и оно работает нормально.