Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамически создаваемые Лэйблы 
:(
    Опции темы
Fedor
Дата 24.12.2003, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Динамически создаю Label'ы:
if условие, то...
Labels[i,j]:=TLabel.Create
Это все понятно.
А далее нужно освободить все из них, тоесть label[i,j].free
проблема: если из-зи условия конкретный Label не создался, то при освобождении выается ошибка.
пробывал делать:
Код

try
for i:=1 to n do
 for j:=1 to n do
  Labels[i,j].free;
except
end;

выдается ошибка
Также пробовал:
Код

for i:=1 to n do
 for j:=1 to n do
   if labels[i,j]<>free then Labels[i,j].free;

Тоже выдается ошибка
помогите это сделать...


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Illusion Dolphin
Дата 24.12.2003, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



А попробуй по умолчанию задавать всем элементам массива значение nul, а потом проверять на него, и если он не nul, тогда делать freeandnil(labels[i,j])


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
zemfir
Дата 25.12.2003, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Вы пытаетесь освободить то, чего нетsmile.gif Естественно будет выдаваться ошибка. Если Вы с этим смирились и это по какой-либо причине нужно (не могу представить), и Вам просто нужно выполнить цикл, то заключите free в скобки исключения, или ещё лучше сделайте как советуют, а именно задайте null и проверяйте перед деструктором if assigned(l).
PM MAIL   Вверх
Fedor
Дата 25.12.2003, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Попробую все, что предложили...
zemfir а Вы не могли бы рассказать как именно заключать в скобки исключения. А то че-то у меня пока с ентим проблемы... Даже в хелпе нормально не могу найти...


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
zemfir
Дата 25.12.2003, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



for i:=1 to n do
for j:=1 to n do
begin
try
Labels[i,j].free;
except
end;
end;
но вообще, это порочный путь.
Правльно изначально задать значения
Labels[i,j]=nil

а при уничтожении

if Assigned(Labels[i,j]) then Labels[i,j].Free,
В принципе, перехват исключения стоять должен, но только как "на всякий случай", а может и не должен, не должно быть в этому случае "всяких случаев".


Это сообщение отредактировал(а) zemfir - 25.12.2003, 01:21
PM MAIL   Вверх
Fedor
Дата 25.12.2003, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



zemfir Дольшое спасибо! Буду пробовать.


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Петрович
Дата 25.12.2003, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Illusion Dolphin
Цитата
а потом проверять на него, и если он не nul, тогда делать freeandnil(labels[i,j])

и zemfir
Цитата
if Assigned(Labels[i,j]) then Labels[i,j].Free,

Проверка вовсе не обязательна, если массив был проинициирован Nil. Дело в том, что Free для того сделан что-бы на Nil не ругаться. Иначе можно было просто дергать Destroy.
Вот выдержка из справки:
Цитата
Free is successful even if the object is nil; so if the object was never initialized, Free won’t result in an error.

Ну а для полной гарантии вот фрагмент из System.pas:
Код
procedure TObject.Free;
begin
 if Self <> nil then
   Destroy;
end;



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.