![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как отправить сообщение в дочерние окна? [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 с указанием формы некоторой
т.е. параметром ты передаешь хэндл окна формы ? ну так а что же ты хочешь ? кому ты послал, тот и получил !
укажи хэндл окна конкретного фрейма, тогда фрейм будет получать