Lazarus и сообщения Win32

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

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

Сообщение itfx » 26.08.2005 16:11:07

Как отловить сообщение системы для окна в Лазарус?

Я хочу выловить сообщение от винды о том, что мою
иконку в трее кто-то клацает...
Например сообщение WM_USER или WM_USER + 1...

В дельфях это делается написанием специальной функции, которая
вызывается автоматически при появлении этого сообщения в очереди...

В Лазарус этот код компилится без ошибок, но функция
на сообщение не реагирует :(

//-----------------------------------------------
public
{ Public declarations }
procedure wmiconclick (var msg: TMessage); message WM_USER;
//------------------------------------------------

//------------------------------------------------
procedure wmiconclick (var msg: TMessage);
begin
// код
end;
//------------------------------------------------

может я чего не так делаю?
itfx
незнакомец
 
Сообщения: 9
Зарегистрирован: 26.08.2005 15:55:51

Сообщение Сергей Смирнов » 26.08.2005 16:27:36

По причине кроссплатформенности, вот так запросто отлавливать все сообщения не получится. Некоторые сообщения вроде транслируются, но информации об этом практически нет. Можно попробовать использовать LM вместо WM (т.е. LM_USER и т.п.), однако в данном конкретном случае шансов мало. Насколько я знаю, есть люди, озаботившиеся созданием компонента для трея, но там много проблем именно с кроссплатформенностью.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение itfx » 26.08.2005 17:08:39

Большое спасибо за совет, но помогло мало :unsure:
Описания LM_USER нет нигде...
Буду пробовать как-то иначе.
itfx
незнакомец
 
Сообщения: 9
Зарегистрирован: 26.08.2005 15:55:51

Сообщение Сергей Смирнов » 26.08.2005 17:21:11

Да не за что :)
Описаний пока вообще нет никаких ни на что. Единственный выход - смотреть архив списка рассылки и рыться в исходниках.
Например, точно работает вот это:
Код: Выделить всё
procedure WMSize(var Msg: TLMSize); message LM_SIZE;
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Alexander » 27.08.2005 13:12:35

Не сталкивался пока с этой проблемой, но мысли есть.

1. В forms есть WndProc.

2. Лазарус открытый, а сообщения всё равно в программу и окна попадают.
Нужно найти место в исходниках, куда сообщения попадают.
Для трея, возможно, это вообще главный цикл программы.
Дописать туда свою какую нибудь процедуру
и перекомпилировать Лазарус.

Кстати, а в винде при создании энтой иконки HWND окна указывают или
как ?
Alexander
 

Сообщение itfx » 29.08.2005 18:06:12

HWND указывается, по этому хендлу и шлются сообщения из системы о нажатии на иконку в трее, вот только получить (перехватить) не получается...
А с wndproc - слишком жестоко, тем более что я постоянно новые релизы ставлю... а идея вообще ничего, может попробую <_<
А то я уже пытаюсь HOOK для отлова этого злобного WM_USER на собственное окно навесить :blink:
itfx
незнакомец
 
Сообщения: 9
Зарегистрирован: 26.08.2005 15:55:51

Сообщение itfx » 30.08.2005 18:31:24

Таки навесил HOOK.
Теперь получил готовый юнит для
работы с иконкой в трее:
Кому интересно:
<a href='http://www.itfx.narod.ru/files/devlib/traytools.zip' target='_blank'>traytools.zip</a>
itfx
незнакомец
 
Сообщения: 9
Зарегистрирован: 26.08.2005 15:55:51


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google Adsense [Bot], MSN [Bot], Yandex [Bot] и гости: 6

Рейтинг@Mail.ru