Как обнаружить изменение ключа модификатора в элементе управления, который не имеет фокуса?

Справочная информация: Я

Я работаю над контролем, полученным изTCustomControl класс, который может получить фокус и который имеет некоторые внутренние элементы внутри. Эти внутренние элементы подсвечиваются, если пользователь наводит курсор на них курсором, вы можете выбрать их, переместить их и так далее. Теперь к проблеме ...

Проблема: Я

я делаю разные действия с (пустьскажем) сфокусированный элемент, если пользователь держитCTRL,ALT или жеСДВИГ модификаторы. Я хотел бы изменить курсор мыши, если пользователь наведет курсор на элемент и удержит, например,CTRL ключ. Довольно просто, вы просто переопределитеKeyDown а такжеKeyUp методы и проверьте, если ихKey параметр равенVK_CONTROL, В коде так:

procedure TMyCustomControl.KeyDown(var Key: Word; Shift: TShiftState);
begin
  inherited;
  if Key = VK_CONTROL then
    Screen.Cursor := crSizeAll;
end;

procedure TMyCustomControl.KeyUp(var Key: Word; Shift: TShiftState);
begin
  inherited;
  if Key = VK_CONTROL then
    Screen.Cursor := crDefault;
end;

Даже если бы это неэто лучший способ проверить,CTRL клавиша была нажата и отпущена (например, из-за существующегоShift параметр состояния), он работает, как и ожидалось, когда элемент управления имеет фокус, который может даже получить, но ...

Моя цель состоит в том, чтобы изменить курсор мыши, когда пользователь удерживает элемент управления (или, если быть точным, определенный элемент внутри него) и удерживает, например, тотCTRL ключ, даже когда мой контроль нене в фокусе. Можно сказать, так что просто переопределитеMouseMove метод и спросите там о модификаторе. И это было бы кстати, но ...

Что делать, если пользователь остается, наведя курсор мыши на мой элемент управления, а затем нажмите и отпуститеCTRL ключ? Что выигралне генерирует никакого движения мыши или события нажатия клавиши для моего элемента управления, или я ошибаюсь? Ну, так что мой вопрос вполне очевиден ...

Вопрос:

Как я могу обнаружить изменения ключа модификатора, если элемент управления не 'не имеет фокуса, а пользователь недвигаться мышью? Я думал об этих двух вариантах, но я надеюсь, что что-то упустил:

крючок клавиатуры - надежный, но выглядит для меня излишнепериодическая проверка состояний модификатора с помощью таймера - я не могжить с задержкой

Итак, как бы вы обнаружили изменения ключа модификатора элемента управления, который неТ в настоящее время сосредоточены?

Ответы на вопрос(4)

Ваш ответ на вопрос