Вы не можете просто придумывать имена для ключей и ожидать, что инспектор объектов поймет, что вы имеете в виду. Свойство ShortCut
не является строкой; это TShortCut
, и ему может быть назначено только значение, которое может быть преобразовано в TShortCut
.
На клавиатуре нет клавиш с именами ADD
, subtract
или divide
, и поэтому они не могут быть назначены как таковые для ShortCut
; они не существуют, поэтому их нельзя преобразовать в TShortCut
.
Вы можете установить ярлык непосредственно на + , - , / и Ввести (значения +
, -
, /
и Enter
), и они должны работать нормально. (Хотя назначение общих одиночных нажатий клавиш обычно не очень хорошая идея - если форма имеет только одну вещь, которую она может сделать в ответ на клавишу +
, это может быть хорошо; если есть элемент управления для редактирования или что-то, что также может получить +
разумно, тогда это ужасная идея, потому что действие ярлыка может сработать, когда пользователь не намерен это делать).
Как указывает Дэвид, это не поднимет требование цифровой клавиатуры. Для этого вам нужно будет присвоить ShortCut
в коде:
procedure TForm1.FormCreate(Sender: TObject);
begin
AddAction.ShortCut := Shortcut(VK_ADD, []);
SubtractAction.ShortCut := ShortCut(VK_SUBTRACT, []);
DivideAction.ShortCut := ShortCut(VK_DIVIDE, []);
end;
Однако я не могу найти никакого различия между вводом NUMPAD и обычным вводом, используя определения виртуальных ключей. Возможно, вам потребуется сделать это с помощью модификатора или событий нажатия клавиш.
Что касается определения того, какой из них использовался, вы должны называть их соответствующим образом (как в AddAction
, SubtractAction
, DivideAction
и EnterAction
), а затем вы можете ссылаться на них по имени в события OnUpdate
или OnExecute
:
if (Sender = TAddAction) then // Add keypress fired
DoAddAction
else if (Sender = TSubtractAction) then
DoSubtractAction
// etc