Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Подводные камни
  
О разделе

Список по категориям
Общий список

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
 
 19:50 Fox
 
 
Во Флориде и в Королевстве сейчас  19:57[Войти] | [Зарегистрироваться]

VCL.TCustomFrame.Не вызывается метод RemoveActionList

Денис
дата публикации 12-09-2005 10:16

КАТЕГОРИЯБИБЛИОТЕКА.VCL.TCustomFrame.Не вызывается метод RemoveActionList
ПРОДУКТDelphi
ПЛАТФОРМАWindows


При создании фрейма с ActionList в методе TCustomFrame.Notification вызывается метод TCustomFrame.AddActionList, добавляющий ActionList в FActionLists родильской формы. Но при уничтожении метод TCustomFrame.Notification не вызывается, и, соответственно, метод TCustomFrame.RemoveActionList тоже не вызывается. При простом уничтожении формы в этом нет ничего страшного, но при динамическом создании и уничтожении фрейма это приведет к тому, что в методе TCustomForm.IsShortCut будет обращение к уже уничтоженному объекту класса TCustomActionList с соответствующим Access Violation.

type
  TTestFrame = class(TFrame)
    ActionList1: TActionList;
  public
    destructor Destroy; override;
  end;

destructor TTestFrame.Destroy;
begin
//  ActionList1.Free;                    1 вариант решения
//  Notification(ActionList1, opRemove); 2 вариант решения
  inherited;
end;

var FFrame: TTestFrame;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FFrame := TTestFrame.Create(nil);
  FFrame.Parent := Self;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FFrame.Free;
end;

Проверено в Delphi 6 и 7.


Типовые решения


Способы решения:
  1. Непосредственно вызывать ActionList1.Free в деструкторе фрейма
  2. Непосредственно вызывать Notification(ActionList1, opRemove) в деструкторе фрейма



Смотрите также материалы по темам:
[TFrame] [TActionList] [Интерфейс. Компоненты и формы] [Фреймы]

 Обсуждение материала [ 13-09-2005 10:04 ] 2 сообщения
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Хостинг предоставлен компанией DOTNETPARK (ASP.NET, MS SQL hosting)  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования