Главная / FAQ по Builder'у / 132 Как последовательно удалять ресурсы...

132 Как последовательно удалять ресурсы, если они ссылаются друг на друга?


Для этого есть Notification(TComponent* AComponent, TOperation Operation);

Допустим имеются два компонента A и B. Одно из свойств B ссылается на
компонент  A. Если оба компонента лежат на одной форме, то проблем не будет
если переопределить метод Notification у компонента B.  При удалении
компонента A, у всех компонентов , в том числе B , лежащих на данной форме
вызывается этот метод. Проблема в том, что если удаляемый компонент A
находится на другой форме, это событие у компонента B автоматически не
вызывается. Для того чтобы обеспечить вызов, необходимо сообщить компоненту А,
что бы он при своем удалении вызывал Notification и у компонента B, лежащего
на другой форме. Делается это с помощью функции FreeNotification, которая как
правило вызывается в методе Set свойства Пример

void __fastcall TDataClassLookup::SetDataSource(TDataSource* ds)
{
    if ( FExternalDS != ds )
        {
            FExternalDS = ds;
            if ( ds ) ds->FreeNotification(this);
            FStateChanged |= SCH_DATASOURCE;
            InitDataSource();
        }
}

Теперь ds всегда уведомлять о своем удалении, даже если лежит на другой форме
Вячеслав Ермолаев 2:5020/175.2

Предыдущий вопрос   |  Список вопросов   |   Следующий вопрос

источник      На главную      by jenyok
Copyright © 2003 JTSOFT
Сайт управляется системой uCoz