Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Чисто учебная задачка. Создаю массив динамических компонентов. Каждый элемент массива создаётся по нажатию кнопки, хотя это наверное неважно.
Код:

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
Адрес: Северодонецк.ua
Сообщений: 18,081
Репутация: 6385
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заполнение 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 15:24
Свойства динамически созданных объектов. Dorithur Общие вопросы Delphi 4 12.12.2009 16:35


04:04.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru