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

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

как отправить сообщение в дочерние окна? [D7, Win2k]


diday ©   (2004-08-31 14:40:00) 

С сообщениями начал работать я. Отправляю через SendMessage с указанием формы некоторой. Форма сообщения ловит, а дочерние формы (фреймы) не хотят. как отправить сообщения ко всем дочерним формам?


Digitman   (2004-08-31 16:24:00) [1]


> diday   (31.08.04 16:12) [8]
> А насколько долше?


настолько насколько много компонентов ты разместил на формах и дочерних их компонентах

одход с перебором существующих списков хорош при относительно небольшом суммарном кол-ве компонентов создаваемых в том числе в ран-тайм

если же компонентов весьма много и создаются они искл-но по дизайн-тайм , то разумеется лучше вести свои списки


diday   (2004-08-31 16:21:00) [2]

Ура, я почти счастлив :) всем спасибо я понял "концепцию програмирования DELPHI" :)


Игорь Шевченко   (2004-08-31 16:13:00) [3]


> Тут просто трабла возникла при создании списка, он создается
> после того как скриэтилась форма (на OnCreate).


Создай список в конструкторе формы до вызова inherited и будет тебе счастье


diday   (2004-08-31 16:12:00) [4]

А насколько долше?
Тут просто трабла возникла при создании списка, он создается после того как скриэтилась форма (на OnCreate). То бишь при попытке добавлять фрейма в список объектов на этапе создания оного фрейма на форме, оказывается что списка ешшо не существует.


Игорь Шевченко   (2004-08-31 15:51:00) [5]


> он , конечно, пойдет, но через "назад"


? Эт почему ? Оно, конечно перебирать Screen.Forms а затем компоненты на них будет несколько дольше, чем сделать список только тех компонентов, которым нужно что-то послать.


Digitman   (2004-08-31 15:47:00) [6]


> такой вариант пойдет, или это через назад?


он , конечно, пойдет, но через "назад"

ибо такой список уже существует и создавать его еще раз нет никакой необходимости

есть спиок Screen.Forms, хранящий инф-цию обо всех созданных в приложении объектах-наследникакх класса TForm

каждая форма и каждый контрол на ней - это компонент, а класс TComponent имеет метод св-во-список Components[], пройдясь по которому в цикле можно выбрать те компоненты, которые есть наследники класса TFrame, и получить хэндлы их окон

если фрейм вложен не непосредственно в форму, а в другой компонент, например, панель, то искать фрейм следует уже в списке Панель.Components[]


Игорь Шевченко   (2004-08-31 15:25:00) [7]


>  - при отправке сообщения перебирать список, и отправлять
> сообщение соответствующему объекту (фрейму).
>  такой вариант пойдет, или это через назад?


Хороший вариант. А какие сообщения, кстати, должны отправляться ?


diday   (2004-08-31 15:21:00) [8]

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


Игорь Шевченко   (2004-08-31 15:11:00) [9]


> а нельз ярассылать сообщение всему приложению?


Нет.


diday   (2004-08-31 14:53:00) [10]

Ну а если дочерних форм много и все вложенные тогда что нужно все перебирать, а нельз ярассылать сообщение всему приложению?


Digitman   (2004-08-31 14:50:00) [11]


> Отправляю через SendMessage с указанием формы некоторой


т.е. параметром ты передаешь хэндл окна формы ? ну так а что же ты хочешь ? кому ты послал, тот и получил !

укажи хэндл окна конкретного фрейма, тогда фрейм будет получать


Наверх

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