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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2011, 17:29   #1
Snake_ua
Пользователь
 
Регистрация: 25.09.2007
Сообщений: 66
По умолчанию Destroy в цикле

Доброго времени суток. Столкнулся со следующей проблемой. Направьте пожалуйста мысли в нужное русло. Создаю динамически панельки
Код:
for i := 0 to 2 do
for j := 0 to 10 do
  begin
  NewPanel:=TPanel.Create(Form1.PanelPrt);
  with NewPanel do
  begin
  Inc(n);
    Caption := MasVKey[i+1, j+1];
    Name:='VKey'+IntToStr(i+1)+IntToStr(j+1);
    Width   := 85;
    Height  := 85;
    Top     := Round((Form1.PanelPrt.Height-Height*3)/2) + 88 * i;
    Left    := Round((Form1.PanelPrt.Width-(Width)*11)/2) + 88 * j;
    Parent  := Form1.PanelPrt;
    OnClick := Form1.OwnButtonClick;
 end;
все норм. Но теперь стала задача удалить же эти объекты.
Код:
procedure TForm1.OwnButtonClick(Sender: TObject);
var NameNewPanel: string;
    i, j: byte;
begin
  if TPanel(Sender).Caption='Выход' then
    begin
        for i := 0 to 2 do
          for j := 0 to 10 do
          begin 
          NameNewPanel:='VKey'+IntToStr(i+1)+IntToStr(j+1);
          // TPanel(Sender).Name:=NameNewPanel; //Так делать нельзя - 
                                                  //повторно пытается объект создать
          if TPanel(Sender).Name = NameNewPanel // тоже ничего не
                            //получается, так как хранит Name нажатого объекта 
             then TPanel(Sender).Destroy;
          end;
    end;
end;
Помогите решить эту задачу. Я раньше никогда кодом не создавал и не удалял объекты

По ходу тему еще не туда запостил..

Последний раз редактировалось Snake_ua; 09.05.2011 в 17:40.
Snake_ua вне форума Ответить с цитированием
Старый 09.05.2011, 21:02   #2
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Запихните свои панели в массив. По массиву пробежаться циклом и проще и быстрее.
eduard93 вне форума Ответить с цитированием
Старый 09.05.2011, 22:07   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Либо, как предложил eduard93, воспользуйтесь массивом,
либо, просто перебирайте все компоненты на PanelPrt и удаляйте их. примерно так:
Код:
  // возьмём значения величин для коррекции в массив
  for k:=0 to Form1.PanelPrt.ComponentCount-1 do
     if Form1.PanelPrt.Components[k] is TPanel then begin
        // тут можно добавить дополнительные проверки, например, что имя компонента начинается с VKEY...
        FreeAndNil(TPanel(Form1.PanelPrt.Components[k]));
     end
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.05.2011, 22:23   #4
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

А еще же можно использовать TObjectList, который, если я не ошибаюсь, сможет сам удалить содержащиеся в нем объекты...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 10.05.2011, 02:55   #5
Snake_ua
Пользователь
 
Регистрация: 25.09.2007
Сообщений: 66
По умолчанию

У меня проскакивала мысль о массиве, но голова просто не хочет думать, как это реализовать. На счет TObjectList-а почитаю, посмотрю позже.
Код:
  // возьмём значения величин для коррекции в массив
  for k:=0 to Form1.PanelPrt.ComponentCount-1 do
     if Form1.PanelPrt.Components[k] is TPanel then begin
        // тут можно добавить дополнительные проверки, например, что имя компонента начинается с VKEY...
        FreeAndNil(TPanel(Form1.PanelPrt.Components[k]));
     end
Код красивый, но...
Код:
FreeAndNil(TPanel(Form1.PanelPrt.Components[k]));
Выдало мне, что "постоянный объект не может быть передан как вар параметр"
Snake_ua вне форума Ответить с цитированием
Старый 10.05.2011, 03:02   #6
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от Snake_ua Посмотреть сообщение
У меня проскакивала мысль о массиве...
Делаем наподобие этого
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 10.05.2011, 03:26   #7
Snake_ua
Пользователь
 
Регистрация: 25.09.2007
Сообщений: 66
По умолчанию

что-то с адресами не поладилось. Буду смотреть завтра ночью..
Snake_ua вне форума Ответить с цитированием
Старый 10.05.2011, 03:34   #8
Snake_ua
Пользователь
 
Регистрация: 25.09.2007
Сообщений: 66
По умолчанию

Но все равно больше пока по душе пример Serge_Bliznykov
Snake_ua вне форума Ответить с цитированием
Старый 10.05.2011, 09:05   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

FreeAndNil(TPanel(Form1.PanelPrt.Co mponents[k]));
Цитата:
Выдало мне, что "постоянный объект не может быть передан как вар параметр"
Код:
Form1.PanelPrt.Components[k].Free;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 10.05.2011, 10:20   #10
Snake_ua
Пользователь
 
Регистрация: 25.09.2007
Сообщений: 66
По умолчанию

Это уже ближе, только компоненты удаляет в шахматном порядке)))
Теперь у меня форма похожа на шахматную доску)))
А если вместо
Код:
for k:=0 to Form1.PanelPrt.ComponentCount-1 do
сделать так
Код:
for k:=1 to Form1.PanelPrt.ComponentCount do
У меня получается та же шахматная доска, только элементы удалены со сдвигом влево/вправо по диагонали)))
Snake_ua вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
xForm.Destroy BoozZzilla Общие вопросы Delphi 6 24.03.2011 14:27
Destroy формы SNUPY Общие вопросы Delphi 9 09.02.2010 11:02
DBGrid.destroy; - ? Evgenii Компоненты Delphi 3 01.09.2009 08:26
destroy динамического tabSheet-a-? havok Общие вопросы Delphi 2 29.08.2009 19:41
NForm.Destroy; Манжосов Денис :) Общие вопросы Delphi 3 03.08.2008 22:42