Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизПочему 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c