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

Вниз

Почему ComponentCount не включает в себя динамические объекты?   Найти похожие ветки 

 
lipskiy ©   (2004-09-15 23:20) [0]

Требуется найти на форме все компоненты данного типа. Почему-то несколько физически существующих (видимых) экземпляров динамически созданного визуального компонента (VirtualTreeView) таким образом не обнаруживаются. Это в принципе так для всех динамически создаваемых объектов, или это глюки какие-то? А если не глюки, то как обнаружить динамически созданные объекты?


 
jack128 ©   (2004-09-15 23:26) [1]

lipskiy ©   (15.09.04 23:20)
в массив Components[] входят все компоненты, _владельцем_ которых является данный компонент.


 
default ©   (2004-09-15 23:27) [2]

динамическим компонентам присваивай владельца того что присв-ся комп-ам размещённым в рантайм и всё будет тип-топ


 
lipskiy ©   (2004-09-16 00:24) [3]

Че-то я не понял, а вложенность не поддерживается что-ль???
Когда стал искать непосредственно на владельце - нашлось.
А когда на владельце владельца - не находится.

Подскажите, как правильно сделать:
На форме PageControl, у него три TabSheet, на каждом из которых лежит динамический TreeView, мне надо в одном цикле найти все TreeView. Причем при дальнейшей разработке проекта число табшитов и деревьев будет расти, а к этой процедуре поиска деревьев я больше возвращаться не хочу, мне нужна здесь полная автоматика, не зависящая от того сколько и где этих деревьев лежат, главное, что все они одного типа.


 
jack128 ©   (2004-09-16 01:30) [4]

lipskiy ©   (16.09.04 0:24) [3]
Че-то я не понял, а вложенность не поддерживается что-ль???

в том виде, в каком ты се это представляешь - нет. Если те так нужна - напиши рекурсивную процедурку - делов на 10 минут..


 
Fedia   (2004-09-16 02:53) [5]

lipskiy ©   (16.09.04 00:24) [3]
Я сталкивался с подобной проблемой: нужно было работать с динамически создаваемыми компонентами, также как у тебя, на закладках PageControl-а.
Для получения доступа к ним после их создания, я завел динамический массив записей. Нечто на подобии такого:
 Compon = record
   TV,          //номер компонента TreeView  
   L1: integer; //номер компонента Label  
 end;

 Compon1: array of Compon;

Количество элементов массива соответствовало количеству TabSheet - ов. Перый элемент массива содержал данные по компонентам, содержащимся на PageControl1.Pages[0], второй на .. Pages[1] и т.д.
Номера компонентов заносил в массив при создании компонента, например:
 NewTreeView:=TTreeView.Create(PageControl1.ActivePage);
 NewTreeView.Parent:=PageControl1.ActivePage;
 Compon1[PageControl1.ActivePageIndex].TV:=Integer(NewTreeView);

после этого доступ к ним можно получить так:
for i:=0 to Length(Compon1)-1 do
TTreeView(Compon1[i].TV).Color:=clLime;


 
jack128 ©   (2004-09-16 03:25) [6]

Fedia   (16.09.04 2:53) [5]
TV:=Integer(NewTreeView);
TTreeView(Compon1[i].TV).Color:=clLime


Это сильно.. А почему бы сразу не объявить поле TV как TTreeView??


 
Fedia   (2004-09-16 03:35) [7]

jack128 ©   (16.09.04 03:25) [6]
И что, содержать массив компонентов? Зачем?

>>TV:=Integer(NewTreeView);
>>TTreeView(Compon1[i].TV).Color:=clLime;
Эти две строчки ты к чему привел?


 
lipskiy ©   (2004-09-16 09:36) [8]


> И что, содержать массив компонентов? Зачем?

Ну, насколько я понимаю, это будет не массив компонентов, а массив указателей на объекты, так что, имхо, jack128, прав.

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


 
NAlexey ©   (2004-09-16 09:45) [9]

>lipskiy ©   (16.09.04 09:36) [8]
Владелец это тот, который освобождает память занимаемую теми кем владеет.


 
lipskiy ©   (2004-09-16 10:01) [10]


> Владелец это тот, который освобождает память занимаемую
> теми кем владеет.

Это я знаю, но если это - все, тогда я сделал правильно.
Все, что положено на форму в дизайнтайме, формой же и будет удалено, а значит можно на нее вешать и динамические объекты.


 
default ©   (2004-09-16 16:11) [11]

lipskiy ©   (16.09.04 09:36) [8]
". Решил проблему проще - владельцем искомых потом объектов при создании сделал главную форму, а не табшиты, как раньше."
в [2] об этом и было написано


 
KSergey ©   (2004-09-16 16:24) [12]

> [10] lipskiy ©   (16.09.04 10:01)

Различайте Owner и Parent - это разные вещи, хотя и при непосредственном расположении компонент на форме в дезигн-тайм они и совпадают. А вот для динамически созданных - уж как укажете...


 
Digitman ©   (2004-09-16 16:44) [13]


> lipskiy


а действительно - см. [12] - ты не путаешь назначение Parent- и Owner- свойств искомого компонента ? если, конечно же, искомый компонент наследует TWinControl ?


 
lipskiy ©   (2004-09-16 21:00) [14]


> в [2] об этом и было написано

Да? Тогда спасибо! Если честно, несколько раз перечитывал ту фразу, но смысл ее до меня так и не дошел :))

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



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

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

Наверх




Память: 0.5 MB
Время: 0.037 c
1-1095567429
ArchValentin
2004-09-19 08:17
2004.10.03
Работа с компонентом ListView


1-1095691197
Goga
2004-09-20 18:39
2004.10.03
Управление объектом


11-1081078411
Василий
2004-04-04 15:33
2004.10.03
Установить KOL пакет


1-1095237628
Black
2004-09-15 12:40
2004.10.03
Почему delete(q, 0, 8) выдаёт ошибку?


3-1094036904
Term
2004-09-01 15:08
2004.10.03
Как отобразить содержимое Memo-поля в DBGrid ???