скалогрыз писал(а):Осбой разницы между GetAsyncKeyState и Hook-ами нет! Для обоих прийдётся писать платформенные реализации, с общей кроссплатформенной обёрткой. Аналоги хуков и GetAsyncKeyState, есть и в линуксе и маке...
Ну как бы разница-то всё-таки есть. Для того, чтоб вставить Хук должны быть нужны полномочия суперпользователя, но зато не нужно использовать таймер. Что же касается того, что есть аналоги для линукса и мака, то я даже верю. Это будет мой запасной вариант
Всё правильно, у контролов для "внутреннего использования", события можно менять и использовать как угодно, без дополнительных спец-классов.
А я ни на что большее и не покушаюсь
.
3-х) Соглашусь, что задуманный компонент - ну уж слишком какой-то заумный. Имхо, ни к чему это всё )) И хочет получить информацию, которую знать не нужно!
А предположим, что мой компонент имеет одно основное состояние, где действует своя логика по обработке мышки, но ему иногда нужно показывать некую дополнительную информацию, слегка видоизменяя свой внешний вид. Это существенно более редкая ситуация, которую нужно включать обычно на очень короткое время. И удобно навесить переключение в это состояние по нажатию на Ctrl. Потому что предполагается, что пользователь в основном будет только недолго смотреть на это видоизменённое состояние. Но так же я хочу ему дать возможность кое что подправить в этом видоизменённом состоянии (с этим как раз меньше всего проблем - при нажатии на мышку передаётся состояние кнопки Ctrl).
Добавлено спустя 7 часов 15 минут 37 секунд:скалогрыз писал(а):как итог: регистрировать нужно Application.AddOnUserInputHandler.
Попробовал AddOnKeyDownHandler - то что, нужно, но странно, что нет такого же для KeyUp. Так что всё равно придётся использовать AddOnUserInputHandler. Всем спасибо за обсуждение, особенно скалогрызу!
Добавлено спустя 56 минут 2 секунды:Мда. Всё-таки чуть-чуть они не доделали. Почему в UserInputEvent передают только поле Msg, а не всё сообщение? Я отлавливаю, что отжата какая-то кнопка, причём какая именно вызывающей процедуре известно, а мне придётся вызывать GetKeyState (и его аналогов для не Windows)...