Как обнаружить любую активность на форме?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как обнаружить любую активность на форме?

Сообщение jsa » 23.07.2019 14:43:37

Здравствуйте.
Требуется прописать реакцию на любую активность на форме - нажатие любых кнопок клавиатуры, мыши, или перемещение курсора.
Как правильно перехватывать все события на всех компонентах формы?

Добавлено спустя 2 часа 8 минут 10 секунд:
С клавиатурой в принципе понятно
Form1.KeyPreview:=true;
И событие Form1.onKeyDown

А вот как быть с активностью мыши?
jsa
постоялец
 
Сообщения: 106
Зарегистрирован: 28.11.2017 13:46:04

Re: Как обнаружить любую активность на форме?

Сообщение olegy123 » 23.07.2019 22:11:52

WinProc
Любое взаимодействие проходит через эту функцию, от перемещения до мышки. Windows так сообщает приложению о действиях.
olegy123
энтузиаст
 
Сообщения: 1488
Зарегистрирован: 25.02.2016 12:10:20

Re: Как обнаружить любую активность на форме?

Сообщение fedan » 24.07.2019 01:00:37

form1.onmouse*
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Как обнаружить любую активность на форме?

Сообщение jsa » 24.07.2019 06:11:35

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
jsa
постоялец
 
Сообщения: 106
Зарегистрирован: 28.11.2017 13:46:04

Re: Как обнаружить любую активность на форме?

Сообщение zoltanleo » 24.07.2019 09:20:19

TApplicationProperties.OnUserInput

https://lazarus-ccr.sourceforge.io/docs ... rties.html
ловит любой ввод
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 323
Зарегистрирован: 17.10.2013 10:55:01

Re: Как обнаружить любую активность на форме?

Сообщение olegy123 » 25.07.2019 16:24:08

У меня сейчас работает перехват HotKey

Код: Выделить всё
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 процедуре.
olegy123
энтузиаст
 
Сообщения: 1488
Зарегистрирован: 25.02.2016 12:10:20


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru