Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
ВнизКак обратиться к объекту, если еасть его имя. Найти похожие ветки
← →
tazik © (2005-01-25 22:27) [40]ЛАДНО! ВСЕМ БОЛЬШОЕ СПАСИБО ЗА ВНИМАНИЕ!!!! МНЕ ПОРА!!!!!
← →
Gero © (2005-01-25 22:51) [41]
> Абсолютно уверен. Дело в том, что у меня перед собой открытый
> исходник, я от туда все беру.
Тогда что такое FindComponent?
← →
tazik © (2005-01-26 09:05) [42]> Gero
FindComponent - это стандартная функция, типа TComponent, возращающая Component по его имени.
Form.FindComponent("SomeComponent").свойства
← →
ЮЮ © (2005-01-26 09:19) [43]TComponent.FindComponent
Indicates whether a given component is owned by the component.
Чей FindComponent работает в так нызываемом "примере кода"?
← →
ЮЮ © (2005-01-26 09:22) [44]Коль ты строишт дерево объектов, то это должен быть не Form.FindComponent, а <Компонент, соответствующий узлу дерева, содержащий текуший>.FindComponent
← →
begin...end © (2005-01-26 11:27) [45]> tazik
У каждого компонента (экземпляра класса TComponent или его потомка) есть свойства Owner (владелец) и Parent (родитель).
Владелец отвечает за уничтожение компонента. Т.е. если, например, указать в качестве владельца какого-нибудь создаваемого компонента форму, то она, когда будет уничтожаться сама, автоматически уничтожит и этот компонент. Владельца при создании экземпляра можно вообще не указывать, но в этом случае об уничтожении объекта нужно заботиться самостоятельно.
Свойство Parent влияет на то, кто будет управлять данным компонентом (отображать его).
У каждого компонента есть также свойство-массив Components - в него заносятся все компоненты, для которых родителем является данный компонент.
Метод FindComponent компонента просто ищет в списке Components компонент с нужным именем.
Вот Вы пишете:
> tab := TTabSheet.Create(ParentPC);
> tab.PageControl := ParentPC;
В первой строке Вы указываете, кто будет владельцем tab - ParentPC. Это означает, что за уничтожение tab будет отвечать ParentPC. И что после создания tab ссылка на неё окажется именно в массиве ParentPC.Components. Вместо ParentPC можно было указать, например, форму, или объект Application, т.е. любой компонент, или вообще NIL.
Во второй строке, фактически, происходит назначение свойства tab.Parent (см. в исходниках VCL реализацию метода tab.SetPageControl).
Поэтому теперь есть два варианта:
1. Оставить создание tab в том виде, в каком оно было до сих пор. Но учесть то, что владельцем (owner"ом) этой tab будет не форма, а ParentPC. И потом искать tab не в списке компонентов формы, как Вы это делали до сих пор, а в списке ParentPC.Components, т.е. вызывать метод ParentPC.FindComponent.
2. Назначать владельцем tab форму, а не ParentPC. Искать также, как Вы искали раньше, т.е. среди компонентов формы.
← →
tazik © (2005-01-26 21:54) [46]> to begin...end
Милый Вы мой человек! Спасибо Вам большое! Я давно ждал такого пояснения ситуации! Теперь я понял, что к чему! Побольше бы таких ответов! Еще раз, спасибо Вам!
← →
Юрий Зотов © (2005-01-26 22:14) [47]> begin...end © (26.01.05 11:27) [45]
Весьма достойно. Уважаю. Искренне.
← →
Skier © (2005-01-27 06:53) [48]
> У каждого компонента есть также свойство-массив Components
> - в него заносятся все компоненты, для которых родителем
> является данный компонент.
TComponent.Components - Lists all components owned by the component.
← →
begin...end © (2005-01-27 08:41) [49]> [48] Skier © (27.01.05 06:53)
Спасибо за поправку. Я как раз пытался показать разницу между родителем и владельцем, и...
В общем, читать следует так:
У каждого компонента есть также свойство-массив Components - в него заносятся все компоненты, для которых владельцем (owner"ом) является данный компонент.
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.036 c