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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2016, 18:13   #1
Rec0il
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 69
По умолчанию Найти первую пустую ячейку массива (Почему не работает)

Цель: сделать панель быстрого запуска на компоненте Image.
Не могу понять почему программа не работает как надо.
Заранее говорю, код что ниже, находится в кнопке.
один клик = один созданный Image


Как я хочу что бы она работала:
Создаётся N-ое количество Image, пусть будет 10 для начала...
Далее, допустим захотелось удалить несколько любых (не обязательно последних по счету), для примера возьмем на удаление 3-й и 6-й.
Далее, если опять попытаться создать Image, он должен создать вначале 3-й... То-есть берет первую по счету пустую ячейку массива.

Как программа ведет себя с данным кодом:
Всё тот же пример.. 10 Image, удалили 3-й и 6-й.
Пробуем добавить Image, но программа создает не 3-й или 6-ой, а 11-й(всего создали 10), то-есть что-то не так я сделал. что именно ? поглядите пожалуйста код.


Код:
 var i:Integer;

  public
      IMG : array [1..20] of TsImage;
end;

  Form1: TForm1;
n:Integer;

...
...
...
...


var i : integer;
  begin
     for i:=1 to 20 do // делаю цикл от 1 до 20
   begin
     if IMG[i]=nil then // если в ходе цикла находит пустую ячейку
     begin
       n:=i; // переменной для создания Image присваиваю значение из i
      IMG[n] := TsImage.Create( Form1 ); // создаем...
      IMG[n].Parent := Form1;
      IMG[n].Name := 'IMG' + inttostr( n );
      IMG[n].Align:=alTop;
      IMG[n].Top := n;
      IMG[n].Width := 33;
      IMG[n].Height := 33;
      IMG[n].Picture.LoadFromFile( DefaultImage );
      IMG[n].Tag:=n;
       Break; // завершаем цикл, что бы не создавало все Image сразу. А только первый (по счету) не созданный. 
     end;
   end;
Если что, удаляю с помощью .Free;

Последний раз редактировалось Rec0il; 19.01.2016 в 18:17.
Rec0il вне форума Ответить с цитированием
Старый 19.01.2016, 18:19   #2
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

FreeAndNil вместо Free (?)
Filka вне форума Ответить с цитированием
Старый 19.01.2016, 18:21   #3
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Где удаление, зачем n, почему 20?
come-on вне форума Ответить с цитированием
Старый 19.01.2016, 18:23   #4
Rec0il
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 69
По умолчанию

Цитата:
Сообщение от Filka Посмотреть сообщение
FreeAndNil вместо Free (?)
Undeclared identifier: 'FreeAndNil'
Цитата:
Сообщение от come-on Посмотреть сообщение
Где удаление, зачем n, почему 20?
Я же написал, удаляю путем Free;
Если подробнее, то
Есть переменная SensorTag, которая принимает Tag компонента, путем mousemove на компонент.
Правой кнопкой по компоненту вызывается popup, в нем кнопка удалить, в которой код:
IMG[SensorTag].Free;

Последний раз редактировалось Rec0il; 19.01.2016 в 18:26.
Rec0il вне форума Ответить с цитированием
Старый 19.01.2016, 18:24   #5
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

Цитата:
Undeclared identifier: 'Freeandnil'
uses SysUtils
Filka вне форума Ответить с цитированием
Старый 19.01.2016, 18:28   #6
Rec0il
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 69
По умолчанию

Цитата:
Сообщение от Filka Посмотреть сообщение
uses SysUtils
SysUtils Записан в Uses. Не помогает.. все ровно Undeclared identifier: 'FreeAndNil'
Rec0il вне форума Ответить с цитированием
Старый 19.01.2016, 18:29   #7
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

Где код удаления?
Filka вне форума Ответить с цитированием
Старый 19.01.2016, 18:31   #8
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
IMG[SensorTag].Free;
ну так вы проверяете if IMG[i]=nil, а кто его туда положил, аспушкин??
вот и укажите
IMG[SensorTag].Free;
IMG[SensorTag] := nil;
come-on вне форума Ответить с цитированием
Старый 19.01.2016, 18:32   #9
Rec0il
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 69
По умолчанию

Цитата:
Сообщение от Filka Посмотреть сообщение
Где код удаления?
Есть переменная SensorTag, которая принимает Tag компонента, путем mousemove на компонент.
Правой кнопкой по компоненту вызывается popup, в нем кнопка удалить, в которой код:
Код:
IMG[SensorTag].Free;
Rec0il вне форума Ответить с цитированием
Старый 19.01.2016, 18:35   #10
Rec0il
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 69
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
ну так вы проверяете if IMG[i]=nil, а кто его туда положил, аспушкин??
вот и укажите
IMG[SensorTag].Free;
IMG[SensorTag] := nil;
Спасибо, я бы долго еще втыкал на код создания, а не удаления)))
Всем спасибо пацаны, проблема решена.
Rec0il вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти первую непустую ячейку в строке Excel Доктор Microsoft Office Excel 48 15.10.2015 16:53
Как найти пустую ячейку в Excel? aspir33 Общие вопросы C/C++ 7 16.11.2014 16:51
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56
Копирование данных на первую пустую ячейку kzld Microsoft Office Excel 8 15.07.2009 14:06
как найти первую заполненную ячейку в диапазоне Bezdar Microsoft Office Excel 3 19.02.2009 11:59