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

Вниз

Как понять, что тот или иной компонент создан?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
2-1227908386
aKor
2008-11-29 00:39
2009.01.11
Microsoft Word


2-1227705341
MS
2008-11-26 16:15
2009.01.11
Указатель на тип string


11-1196634700
Koss (345-824-826)
2007-12-03 01:31
2009.01.11
Lazarus for WinCe как востоновить окно ???


15-1226927615
-=LeXX=-
2008-11-17 16:13
2009.01.11
Трансятор


2-1227687010
cosinus
2008-11-26 11:10
2009.01.11
Как понять, что тот или иной компонент создан?