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

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

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

Ответить
itfx
незнакомец
Сообщения: 9
Зарегистрирован: 26.08.2005 15:55:51

Сообщение itfx »

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

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

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

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

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

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

может я чего не так делаю?
Аватара пользователя
Сергей Смирнов
энтузиаст
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва
Контактная информация:

Сообщение Сергей Смирнов »

По причине кроссплатформенности, вот так запросто отлавливать все сообщения не получится. Некоторые сообщения вроде транслируются, но информации об этом практически нет. Можно попробовать использовать LM вместо WM (т.е. LM_USER и т.п.), однако в данном конкретном случае шансов мало. Насколько я знаю, есть люди, озаботившиеся созданием компонента для трея, но там много проблем именно с кроссплатформенностью.
itfx
незнакомец
Сообщения: 9
Зарегистрирован: 26.08.2005 15:55:51

Сообщение itfx »

Большое спасибо за совет, но помогло мало :unsure:
Описания LM_USER нет нигде...
Буду пробовать как-то иначе.
Аватара пользователя
Сергей Смирнов
энтузиаст
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва
Контактная информация:

Сообщение Сергей Смирнов »

Да не за что :)
Описаний пока вообще нет никаких ни на что. Единственный выход - смотреть архив списка рассылки и рыться в исходниках.
Например, точно работает вот это:

Код: Выделить всё

procedure WMSize(var Msg: TLMSize); message LM_SIZE;
Alexander

Сообщение Alexander »

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

1. В forms есть WndProc.

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

Кстати, а в винде при создании энтой иконки HWND окна указывают или
как ?
itfx
незнакомец
Сообщения: 9
Зарегистрирован: 26.08.2005 15:55:51

Сообщение itfx »

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

Сообщение itfx »

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