Как обнаружить изменение ключа модификатора в элементе управления, который не имеет фокуса?
Я работаю над контролем, полученным из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 ключ? Это не вызовет никакого движения мыши или события нажатия клавиши для моего контроля, или я ошибаюсь? Ну, так что мой вопрос вполне очевиден ...
Вопрос:Как я могу обнаружить изменения клавиши-модификатора, если элемент управления не имеет фокуса и пользователь не двигается с помощью мыши? Я думал об этих двух вариантах, но я надеюсь, что что-то упустил:
крючок клавиатуры - надежный, но выглядит для меня излишнеПериодическая проверка состояния модификатора с таймером - я не мог жить с задержкойИтак, как бы вы обнаружили изменения клавиш модификатора элемента управления, который в данный момент не сфокусирован?