Здравствуйте.
Требуется прописать реакцию на любую активность на форме - нажатие любых кнопок клавиатуры, мыши, или перемещение курсора.
Как правильно перехватывать все события на всех компонентах формы?
Добавлено спустя 2 часа 8 минут 10 секунд:
С клавиатурой в принципе понятно
Form1.KeyPreview:=true;
И событие Form1.onKeyDown
А вот как быть с активностью мыши?
Как обнаружить любую активность на форме?
Модератор: Модераторы
Re: Как обнаружить любую активность на форме?
WinProc
Любое взаимодействие проходит через эту функцию, от перемещения до мышки. Windows так сообщает приложению о действиях.
Любое взаимодействие проходит через эту функцию, от перемещения до мышки. Windows так сообщает приложению о действиях.
Re: Как обнаружить любую активность на форме?
form1.onmouse*
Re: Как обнаружить любую активность на форме?
fedan писал(а):form1.onmouse*
Это не работает, события перехватывают компоненты формы.
Именно поэтому для событий клавиатуры на форме имеется переключатель KeyPreview, а вот для событий мыши, такого переключателя нет.
Добавлено спустя 2 часа 12 минут 9 секунд:
olegy123 писал(а):WinProc
Любое взаимодействие проходит через эту функцию, от перемещения до мышки. Windows так сообщает приложению о действиях.
Не могу разобраться.
Вы пишете про функцию WinProc
по ссылке описана функция WindowsProc
при этом я у формы нахожу только property WindowsProc:TWndMedthod
Понятно, что существует функция в которой можно обработать сообщение от винды.
Список сообщений которые нужно отрабатывать тоже понятен https://wiki.winehq.org/List_Of_Windows_Messages | https://docs.microsoft.com/ru-ru/window ... t-messages | https://docs.microsoft.com/ru-ru/window ... ifications
Не понятно как прописать функцию в программу.
И еще, существует ли другой не завязанный на винду способ? Т.к. программу планируется компилировать и в Ubuntu
Re: Как обнаружить любую активность на форме?
TApplicationProperties.OnUserInput
https://lazarus-ccr.sourceforge.io/docs ... rties.html
ловит любой ввод
https://lazarus-ccr.sourceforge.io/docs ... rties.html
ловит любой ввод
Re: Как обнаружить любую активность на форме?
У меня сейчас работает перехват HotKey
Так можно вылавливать все WM_.. события в одной WndProc процедуре.
Код: Выделить всё
TFormMy = class (TFrom)
...
private
procedure WndProc(var Message:TMessage);override;
..
TFormMy.WndProc(var Message:TMessage);
begin
if Message.msg=WM_HOTKEY then
case Message.WParam of
0: ..
1:..
end
else
inherited;
end;Так можно вылавливать все WM_.. события в одной WndProc процедуре.
