Главная страница
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.022 c
14-1095520764
kaZaNoVa
2004-09-18 19:19
2004.10.10
Устанавливаю винду, что выбрать ? ХР или 2003 ? или всё же 2000 ?


4-1094391990
Command
2004-09-05 17:46
2004.10.10
Стиль XP


1-1096059561
DeoS
2004-09-25 00:59
2004.10.10
Удаление


1-1095847401
kukuikar
2004-09-22 14:03
2004.10.10
Не работает #9 - табуляция в ListBox


1-1096286363
TActionManager
2004-09-27 15:59
2004.10.10
Как создать свой пункт меню первого уровня