Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Message методы


Drowsy ©   (2015-01-30 06:57:00) 

Почему в справочниках указывается, что
"номера сообщений от 1 до WM_USER-1 зарезервированы системой, от WM_USER до $7FFF – для пользовательских сообщений"
а во множестве примеров спокойно используют сообщения из диапазона системных, например:

const
MSG_STRING = 1;
MSG_INT = 2;

можно обмениваться строковыми и целочисленными данными между классами через message методы:

type
TClass1 = class
private
 FSomeString: WideString;
 procedure OnStringGet(var Msg: TDataMessage); message MSG_STRING;
 procedure OnIntegerReceived(var Msg: TDataMessage); message MSG_INT;
end;

procedure TClass1.OnIntegerReceived(var Msg: TDataMessage);
begin
Msg.Result := Msg.Data * 2;
end;

procedure TClass1.OnStringGet (var Msg: TDataMessage);
begin
FSomeString := 'test string example';
Msg.Result := Integer(PWideChar(FSomeString));
end;


Rouse_   (2015-01-31 16:47:00) [1]

ЗЫ: забыл ответ на вопрос топикстартера.

> а во множестве примеров спокойно используют сообщения из
> диапазона системных, например:

Они просто не придерживаются концепции, и именно в приведенных примерах этот код будет работать, но: http://www.gunsmoker.ru/2010/05/90.html


Rouse_   (2015-01-31 16:35:00) [2]


> А в примере просто класс от TObject, которьій не имеет стандартного
> обработчика оконньіх сообщений, то есть, он не окно вообще;
>  поєтому ему можно посьілать что угодно, и все єти сообщения
> ни с чем пересекаться не будут.

Стесняюсь спросить, раз уж речь зашла об "оконных сообщениях" (слово-то какое) на какой хэндл твоему классу от TObject они приходить будут? ;)


1234567   (2015-01-31 15:26:00) [3]

Тут речь идет об оконньіх сообщениях, то есть, єто имеет отношение к классам, порожденньім от TWinControl, так как они используют системньіе оконньіе сообщения.
А в примере просто класс от TObject, которьій не имеет стандартного обработчика оконньіх сообщений, то есть, он не окно вообще; поєтому ему можно посьілать что угодно, и все єти сообщения ни с чем пересекаться не будут.


icWasya   (2015-01-30 09:15:00) [4]

А вот если такие методы приделаешь к форме, то получится очень странно, поскольку
 WM_CREATE           = $0001;
 WM_DESTROY          = $0002;
, и форма даже не появится на экране.


sniknik   (2015-01-30 07:59:00) [5]

не все системные события делают что-то важное/полезное у тебя в программе-форме. нет проблем перекрыть их... но вот попробуй так перекрыть событие перерисовки например и поймешь почему лучше следовать рекомендациям справочников.


MBo   (2015-01-30 07:51:00) [6]

Данный пример показывает, как в своем классе использовать механизмсообщений. С Windows сообщениями это не пересекается


Наверх

Титульная страница Поиск, карта сайта Написать письмо