Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

как отправить сообщение в дочерние окна?   Найти похожие ветки 

 
diday   (2004-08-31 14:40) [0]

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


 
Digitman ©   (2004-08-31 14:50) [1]


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


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

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


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

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


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


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


Нет.


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

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


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


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


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


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


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


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

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

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

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

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


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


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


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


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

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


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


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


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


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

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


 
Digitman ©   (2004-08-31 16:24) [11]


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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
1-1096115569
Dmy
2004-09-25 16:32
2004.10.10
PopupMenu + иконка в трее — не закрывается нормально...


1-1096112153
debuger
2004-09-25 15:35
2004.10.10
закрытся на TForm.Close


14-1092729585
Piter
2004-08-17 11:59
2004.10.10
Magic Forum beta9 - клиент форумов "Мастера Дельфи" и "Дремучие"


6-1091073148
maxkool
2004-07-29 07:52
2004.10.10
фрейм2


3-1094803058
Snip
2004-09-10 11:57
2004.10.10
DLL и IB