Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.47 MB
Время: 0.005 c
15-1226374405
Slider007
2008-11-11 06:33
2009.01.11
С днем рождения ! 11 ноября 2008 вторник


1-1205180556
mr. Eof
2008-03-10 23:22
2009.01.11
Проблема с таймером


15-1226981467
Slider007
2008-11-18 07:11
2009.01.11
С днем рождения ! 18 ноября 2008 вторник


15-1226480093
godkiller07
2008-11-12 11:54
2009.01.11
у меня вопрос...


15-1226924798
@!!ex
2008-11-17 15:26
2009.01.11
Что это за музыка?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский