Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];

Вниз

Как уведомить компоненты об уничтожении одной из них?   Найти похожие ветки 

 
Calm   (2003-08-12 08:48) [0]

Допустим имеется много компонент TMyConponent.
Имеются свойсва TMyComponent.ChildFirst:TMyConponent, TMyComponent.ChildSecond:TMyConponent.
В ходе работы программы один из компонент удаляеется. Как уведомить остальных об этом, чтобы кому нужно поняли, что свойства ChildX больше ни на что не указывают?

На ум приходят варианты:
1. Регистрировать все компоненты в некоем списке. При удалении у всех компонент списка вызывать метод проверки корретности свойств. IMHO ненаучно и извращение.
2. Сделать компоненты TWinConrol"ами и посылать им сообщения. Способ не на много отличается от первого.
3. При выполнении MyComponent1.ChildFirst:=MyComponent2; запоминать в MyComponent2 ссылку на MyComponent1. IMHO изврат еще больший.

А может это все-таки нормальные способы?
Подскажите, мастера, как быть в таком случае?


 
MBo   (2003-08-12 08:57) [1]

см. в исходниках механизм Notification


 
Zergling   (2003-08-12 09:01) [2]

TMyComponent = class(T...)
private
...
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); Dynamic;
public
...
published
...
end;

procedure TMyComponent.Notification(AComponent: TComponent; Operation: TOperation);
begin
if Operation = opRemove then ...;
end;


 
Zergling   (2003-08-12 09:02) [3]

MBo © Опередил :)


 
icWasya   (2003-08-12 09:15) [4]

только не Dynamic а Override


 
Zergling   (2003-08-12 09:28) [5]

icWasya © (12.08.03 09:15) [4]

Все определяется задачей.
Смотря от какого класса произощел его компонент. Tсли например от TCollectionItem то Dynamic.


 
Calm   (2003-08-12 10:27) [6]

Все большое спасибо :)


 
Calm   (2003-08-12 10:31) [7]

А как поступить лучше, если имеется подобная схема, но объекты являются не потомками TComponent, у которых есть метод Notification, а непосредственными потомками TObject?


 
pasha_golub   (2003-08-12 11:03) [8]

Сделать их потомками TComponent ;-)


 
icWasya   (2003-08-12 11:29) [9]

>> .. объекты не являются потомками TComponent ...
Ну тогда посмотри, как ЭТО делается у нормальных компонент и попытайся сделать что то похожее.
А делается так
каждая компонента ведёт список, комго надо известить о своём уничтожении (см FreeNotification)
в деструкторе компоненты просматривается этот список, и у всех компонент из этого списка, а такжее у Ownera, вызывается метод
Notification. Предполагается, что в методе Notification компонента правильно удалит ссылки на уничтожаемую компоненту, почистит список уведомлений (см RemoveFreeNotification), и, если необходимо, уведомит кого-нибудь ещё



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.01 c
14-81924
ghost_by
2003-08-08 17:35
2003.08.25
DBGrid - несколько вопросов.


14-81958
AlexG
2003-07-28 13:27
2003.08.25
Вопрос про горячие клавиши


1-81665
GIL
2003-08-12 02:52
2003.08.25
реальные размеры изображения


8-81849
Alex3000
2003-04-26 12:32
2003.08.25
Анимированный GIF???


14-81962
Till
2003-08-06 09:43
2003.08.25
Конкретный прикол!!!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский