Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Delphi
Перезагрузить страницу Удаление динамических объектов полная очистка формы
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
095 095 вне форума
Member
 
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2007
По умолчанию Удаление динамических объектов полная очистка формы - 03.10.2007, 21:51

Уважаемые, подскажите:

На форме динамически создаются несколько десятков объектов : кнопки, чекбоксы, мемы всякие и проч

Как этот весь хлам динамически удалить сразу с формы весь одной кнопой??
Ответить с цитированием
  (#2 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,313
Сказал(а) спасибо: 33
Поблагодарили 56 раз(а) в 56 сообщениях
Регистрация: 16.10.2005
По умолчанию 03.10.2007, 22:29

1) Создать панель, разместить все элементы на панели, потом грохнуть панель -> все элементы удаляются вместе с родителем
2) То же самое с PageControl - просто динамически переключаем страницы.
3) Наконец, если уж нужно делать "в лоб" - при создании помечаем все элементы, например, уникальным тэгом, затем в цикле по всем компонентам формы удаляем помеченные.
Ответить с цитированием
  (#3 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 8,087
Сказал(а) спасибо: 25
Поблагодарили 1,050 раз(а) в 1,029 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 03.10.2007, 22:32

запомнитить указатели на создаваемые компоненты в массив и через него удалять.
Ответить с цитированием
  (#4 (permalink)) Старый
095 095 вне форума
Member
 
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2007
По умолчанию 04.10.2007, 22:14

Я все теги прописал, а дайте код на удаление по тагам plzzzzzzzzzz!!!!!!!!!!
Ответить с цитированием
  (#5 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,313
Сказал(а) спасибо: 33
Поблагодарили 56 раз(а) в 56 сообщениях
Регистрация: 16.10.2005
По умолчанию 04.10.2007, 23:51

Примерно так:
Код:
  for i := 0 to ComponentCount - 1 do
      if Components[i].Tag = 333 then
            {Делаем с компонентом все, что надо}
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
095 095 вне форума
Member
 
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2007
По умолчанию 06.10.2007, 15:57

О! вот это теоритически далжно запахать ..

Хотя form.components[таг].free выводит критическую ашыпку падла зачемто!!!!!!!!!!!!!!!!!! сссс....катина
Ответить с цитированием
  (#7 (permalink)) Старый
TOPT TOPT вне форума
Member
 
Сообщений: 125
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.12.2005
По умолчанию 08.10.2007, 22:42

Понятное дело что "ашибка"..
Сам посуди.. Что будет Если ты вытащить 1-й элемент из 10... В данном случае все остальные сместятся..
2-й станет 1-м, 3-й 2-м и т.д.

Ну и когда ты обратишься по индексу к элементу которого уже нет на месте.. исключение..

Все просто вроде..

Либо удаляй элементы с конца..
Код:
for i:= Form.ComponentCount-1 downto 0 do
 begin
    Form.Components[i].Free;
 end;
Тогда все будет ОК. Удалишь 10-й, 9-й, 8-й и тд.

Или просто удаляй первый..
Код:
[0]
Код:
for i:=  0 to Form.ComponentCount-1  do
 begin
    Form.Components[0].Free;
 end;
Всегда удалиться первый..
Все дело в смещении.. и волшебных пузырьках.. :-

Через деббагер проследи как оно все работает.. помогало мне на начальном этапе, да и щас тож).

Ну а если тебе необходимо удалить только те элементы, что ты создал динамически, то канечно присваивай их тегам значение.. и тогда это так будет выглядеть

Код:
 for i:= Form.ComponentCount-1 downto 0 do
 begin
   if Form.Components[i].Tag = 666 then
     Form.Components[i].Free;
 end;
Ответить с цитированием
  (#8 (permalink)) Старый
095 095 вне форума
Member
 
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2007
Talking 16.10.2007, 22:46

СпасипА!!!!!!!!!
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полная очистка HDD nodos Любые вопросы от новичков 7 26.03.2012 10:29
Удаление лишних объектов girl-winter Программирование графики 1 08.10.2008 12:25
Создание двух динамических массивов qqeeaaddzzcc С/С++ 6 23.05.2008 17:27
Программное сохранение и удаление формы -=Pavlik=- C++ Builder 13 01.04.2008 18:46
Сложение динамических полей RUSS Delphi 0 23.01.2008 13:21
Добавление, очистка формы с клавишей F1 Rickert Visual C++ 10 24.07.2006 11:33
Удаление невидимых 3D объектов, поворот kata Программирование графики 3 28.09.2005 14:00
Очистка элементов формы MSwift DHTML, JavaScript, VBScript 2 28.07.2005 12:48
Обработка сообщений от динамических объектов Omen Visual C++ 1 03.05.2005 13:09
Вывод динамических массивов imported_Elka Вопросы начинающих программистов 2 04.04.2005 14:48
Удаление объектов на Delphi _Goga Delphi 0 07.06.2004 21:31
Проектирование динамических массивов в С++ Anonymous Вопросы начинающих программистов 1 08.09.2003 23:30



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов