настраиваемый контроль восприятия - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь понять, как заставить мой пользовательский элемент управления (на основе статического текста) реагировать на нажатие клавиши ускорения (delphi, которую я использую, называет ее accelchar). Отвечая, я имею в виду добавление некоторого кода. Лучше всего я обработал WM_SYSKEYUP и проверил заголовок и код символа вручную. Я подозреваю, что должно быть более простое и надежное решение.

1 Ответ

0 голосов
/ 05 января 2019

Вы говорите, что ваш контроль основан на TStaticText. Если вы загляните в TStaticText (или его предка, собственно TCustomStaticText), вы увидите обработчик сообщений, который обрабатывает поведение по умолчанию для фокусировки другого элемента управления:

procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;

В его реализации вы можете увидеть, как он проверяет свое собственное состояние:

if (FFocusControl <> nil) and Enabled and ShowAccelChar and
  IsAccel(Message.CharCode, Caption) then

В базовой реализации, focuscontrol будет фокусироваться при вводе этого if, но в своей реализации вы можете просто создать новый обработчик сообщений, с таким же, если он есть, и добавить к нему свою собственную реализацию.

...