Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2012, 18:34   #1
AndrzejX
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 55
По умолчанию Уничтожение массива динамически созданных компонентов

Чисто учебная задачка. Создаю массив динамических компонентов. Каждый элемент массива создаётся по нажатию кнопки, хотя это наверное неважно.
Код:
var i: Integer=0;
    lb: Array of TLabel;

//Создание компонентов
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetLength(lb, i+1];
  lb[i]:=TLabel.Create(Form1);
  lb.[i].Parent:=Form1;
  lb[i].OnClick:=Label1Click;//Предварительно созданная процедура
//Ну и настройка других свойств......
  inc(i);
end;

//Уничтожение компонента по щелчку по нему
procedure TForm1.Label1Click(Sender: TObject);
begin
  (Sender as TLabel).Free;
end;
И некоторые компоненты таки удаляются, но чаще всего сразу после удаления выскакивает ошибка "Access violation..."

Прошу помощи - почему выскакивает ошибка, и тогда почему не всегда!
Предварительная команда lb:=nil не помогает. Причём, вручную поставленный компонент Label1 в этой же процедуре уничтожается без вопросов.

Последний раз редактировалось AndrzejX; 29.05.2012 в 18:41.
AndrzejX вне форума Ответить с цитированием
Старый 29.05.2012, 18:48   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Нельзя удалять компонент в его же событии. Иногда проходит, потому что после Free память не чистится и в ней остаются ошметья от компонента, эта память в любой момент может быть использована для других целей.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.05.2012, 19:41   #3
AndrzejX
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 55
По умолчанию

Да! Получилось уничтожать по срабатыванию запущенного щелчком таймера. Большое спасибо за пояснение!
AndrzejX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заполнение edit ,ранее созданных динамически Игорь Кулакевич Помощь студентам 10 31.10.2011 12:15
перетаскивание динамически созданных объектов kaizer131 Общие вопросы Delphi 13 15.06.2011 07:59
Сохранение динамически созданных компонентов в ini Pypkin30159 Общие вопросы Delphi 2 15.09.2010 16:42
Сохранение динамически созданных объектов Marsel737 Общие вопросы Delphi 25 15.12.2009 14:24
Свойства динамически созданных объектов. Dorithur Общие вопросы Delphi 4 12.12.2009 15:35