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

Вниз

Ошибка при удалении ActiveX контрола   Найти похожие ветки 

 
AlexeyT ©   (2006-03-30 17:07) [0]

Создаю ActiveX control в конструкторе (Name:= TName.Create(Self); Name.Parent:= Self;); все работает, но при освобождении контрола в деструкторе появляется ошибка:
"Control "Viewer" has no parent window.". Viewer - это экземпляр компонента, в котором создается контрол. Освобождаю контрол так:

destructor TATViewer.Destroy;
begin
 if Assigned(FName) then
   FName.Free; //здесь выдает ошибку

 inherited Destroy;
end;

Что это за ошибка, почему все работает с другими контролами (не ActiveX), которые создаются и освобождаются так же?
Если это важно, контрол - Windows Media Player.


 
Наиль ©   (2006-03-30 22:59) [1]


> (Name:= TName.Create(Self); Name.Parent:= Self;)

Self в Create обеспечивает автоматическое уничтожение FName при уничтожении твоего компонента. Если хочешь уничтожать сам, то нужно писать так: Name:= TName.Create(nil);

> if Assigned(FName) then
>    FName.Free;

Assigned - лишнее, т.к. в Free производится эта же проверка.

> "Control "Viewer" has no parent window.".

Т.к. каждый контрол запрашивает собственый Handle через Parent, то в случае нарушения цепочки (отсутствует Parent), появляется эта ошибка. Выхода в таких случаях два:
1. Обеспечить наличие Parent"a и Parent"a у Parent"a и так далее.
2. Проверять HandleAllocated (если не ошибаюсь) перед выполнением операций способных вызвать такую ошибку.

---
Да поправят меня Боги!


 
AlexeyT ©   (2006-03-31 10:02) [2]


> Self в Create обеспечивает автоматическое уничтожение FName
> при уничтожении твоего компонента. Если хочешь уничтожать
> сам, то нужно писать так: Name:= TName.Create(nil);

OK, спасибо за информацию. Переделаю.

Но я нашел еще другой выход: обнуление FName.Parent перед вызовом FName.Free. Тогда контрол "не обращается" к моему компоненту и ошибки нет.



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

Текущий архив: 2006.11.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.075 c
15-1162651416
SkySpeed
2006-11-04 17:43
2006.11.26
СРОЧНО! Как сделать, чтобы показывался нормально рус. язык?


1-1160053712
atruhin
2006-10-05 17:08
2006.11.26
Проблеммы с двумя TSpliter


3-1158775178
Lexa11_2002
2006-09-20 21:59
2006.11.26
Как сделать лучше структуру данных


15-1162961226
vajo
2006-11-08 07:47
2006.11.26
В Японии создан 512-ядерный процессор


15-1162985787
Сатир
2006-11-08 14:36
2006.11.26
Загадка