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