Обмен сообщениями между формами

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

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

Ответить
S_Gur
постоялец
Сообщения: 136
Зарегистрирован: 30.12.2018 21:17:42

Обмен сообщениями между формами

Сообщение S_Gur »

Господа специалисты по Лазарусу, прошу консультацию. Возник такой вопрос. Я переношу дельфовую программу под Лазарус с целью иметь возможность собрать ее под любую из поддерживаемых Лазарусом платформ. В Дельфях у меня используется обмен сообщениями между формами такого типа:

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

With Screen Do For I   := 0 To FormCount - 1 Do If Forms[I] Is TFmMultiLang Then Forms[I].Perform(WM_CLLANG, 0, 0);


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

protected
    { Protected declarations }
    procedure WMCLLANG(var Msg: TMessage); Message WM_CLLANG;


Я правильно понимаю, что процедуры типа WM...(var Msg: TMessage); - это чисто виндовая реализация? Есть ли универсальный способ обмена сообщениями для всех операционок, или мне нужно будет делать отдельный код для каждой и обвязывать их директивами компилятора типа {$IFDEF WINDOWS}?
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

Да, для каждой ОСи свой код.
S_Gur
постоялец
Сообщения: 136
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

jsa, спасибо. Не подскажете, как такую систему правильно сделать под Линукс?
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Полагаю WM_CLLANG это пользовательское сообщение?
Если вы добавите в uses ссылку на LMessages и объявите обработчик как

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

protected
  { Protected declarations }
  procedure WMCLLANG(var Msg: TLMessage); message WM_CLLANG;

то всё должно работать.
S_Gur
постоялец
Сообщения: 136
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

iskander, да WM_CLLANG - это мое сообщение. В программе оно определяется как WM_USER + 1;

То есть, меняется только наименование юнита? Спасибо большое

Добавлено спустя 8 часов 58 минут 21 секунду:
iskander, я проглядел краем глаза модуль LMessages. Правильно ли я понимаю, что это универсальный, а не только линуксовый модуль? Его можно использовать как минимум и под Windows и под Linux?
Ответить