Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при удалении Panel с формы. [D6, Win95/98, WinXP]


Object ©   (2005-02-21 14:42:00) 

Уважаемые мастера!
Пытаюсь удалять во run-time компоненты Panel по нажатию кнопки мыши так:
TPanel(Sender).Free;

Компоненты удаляются, но вначале выдаётся ошибка:
Abstract Error, или EAccess Violation.
Что это может быть?
Может по другому можно удалить?
Мне надо, чтобы полностью разрушился компонент.
Спасибо.


КаПиБаРа   (2005-02-21 15:27:00) [1]

Чапаев ©   (21.02.05 15:03) [3]
Второй раз за день вы пишите это. Налицо неправильное представление о процессе удаления компонента.

destructor TComponent.Destroy;
begin
 Destroying;
 if FFreeNotifies <> nil then
 begin
   while Assigned(FFreeNotifies) and (FFreeNotifies.Count > 0) do
     TComponent(FFreeNotifies[FFreeNotifies.Count - 1]).Notification(Self, opRemove);
   FreeAndNil(FFreeNotifies);
 end;
 DestroyComponents;
  if FOwner <> nil then FOwner.RemoveComponent(Self);
 inherited Destroy;
end;


Чапаев   (2005-02-21 15:03:00) [2]

Ещё один AV поймаешь при завершении работы программы, если Owner панельки был не nil...


DiamondShark   (2005-02-21 14:56:00) [3]

А нельзя удалять компонент из обработчика его события.


Юрий Зотов   (2005-02-21 14:55:00) [4]

Не нужно удалять компонент непосредственно из обработчика его же события. Вместо прямого удяления пошлите форме через PostMessage сообщение, например, WM_USER+200 и передайте ссылку на компонент в параметре. В обработчике сообщения и удаляйте этот компонент.


Наверх

Титульная страница Поиск, карта сайта Написать письмо