Форум: "Начинающим";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
ВнизКак понять, что тот или иной компонент создан? Найти похожие ветки
← →
cosinus (2008-11-26 11:10) [0]Собственно Subj. Как мне отследить, что компонент создан?
То есть нужно построить конструкцию, вида...
if (Component_name as TComponentClass).created
then...
Или если такого нет, то черезtry...except
обратится к какому либо свойству? Как обычно это делается?
← →
Palladin © (2008-11-26 11:14) [1]не инициализированный и не тронутый объект, как аттрибут другого класса, равен Nil
в общем же случае - никак
сколько раз твердили миру...
← →
Ega23 © (2008-11-26 11:15) [2]Если он создан, то:
1. Указатель на него не равен nil.
2. Он находится в списке Components у своего Owner"а.
Второй пункт не действует, если компонент создавался от nil
Первый пункт не действует, если компонент сначала был создан, а потом убит.
← →
Поросенок Винни-Пух © (2008-11-26 11:44) [3]Как понять, что тот или иной компонент создан?
Это будет бесполезное знание от которого толку мало.
Надо всего лишь знать, указывает ли имеющаяся у тебя ссылка на какой-нибудь живой экземпляр.
← →
Anatoly Podgoretsky © (2008-11-26 12:56) [4]
> Как мне отследить, что компонент создан?
Проще простого!Component := TComponent.Create
... // если сюда попадем, то создан.
← →
Сергей М. © (2008-11-26 13:03) [5]
> Как мне отследить, что компонент создан?
Если при создании компонента не возникла исключительная ситуация, значит он создан.
← →
cosinus (2008-11-26 13:34) [6]Всем спасибо.
Принял и переварил. :)
← →
DevilDevil (2008-11-26 13:38) [7]хех...
var
Component: TComponent;
begin
Component := Form1{или другой Owner}.FindComponent(Component_name);
if (Component <> nil) and (Component.InheritsFrom(Component_Class)) then
begin
...
end;
end;
← →
Leonid Troyanovsky © (2008-11-26 14:22) [8]
> DevilDevil (26.11.08 13:38) [7]
> {или другой Owner}.
Например, nil.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-11-26 15:33) [9]
> cosinus (26.11.08 11:10)
> Как обычно это делается?
Если одному компоненту нужна ссылка на другой,
то оную ссылку хранят в поле компонента (скажем, FComponentLink).
Изначально (после конструктора) поле = nil.
Для доступа к нужному компоненту используют
if Assigned(FComponentLink) then {компонент существует}
FComponentLink.DoSomeMethod;
Единственная тонкость: у компонента, хранящего ссылку д.б. метод
procedure Notification (AComponent: TComponent; oper: TOperation);override;
примерно такого вида:
inherited;
if (oper = opRemove) then
if (AComponent = FComponentLink) then
FComponentLink := nil;
а при назначении ссылки на ComponentX компоненту нужно
подписаться на уведомление FreeNotification(ComponentX).
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c