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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление компонентов с формы, Программный метод 
V
    Опции темы
zzmeyz
Дата 17.11.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть форма с компонентом PageControl с тремя закладками. Как можно программно удалить все компоненты расположенные на второй закладке? Проще говоря, нужно отчистить содержимое закладки.
PM MAIL   Вверх
popolzen
Дата 17.11.2006, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

with PageControl.Pages[1] do 
  for i := 1 to ControlCount do Controls[0].Free;

PM MAIL ICQ   Вверх
digs
Дата 17.11.2006, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



PageControl.Pages[1].DestroyComponents
PM MAIL   Вверх
zzmeyz
Дата 17.11.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Еще вопрос: можно ли выбирать компоненты, которые удалять не нужно? Если точнее, нужно чтоб остались две кнопки.
PM MAIL   Вверх
popolzen
Дата 17.11.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



digs, ты проверял этот код? Попробуй в Form Designer'е создать небольшой примерчик и проверить свой код для начала. Form Designer для всех созданных в нем компонентов выставляет свойство Owner в имя формы, а метод DestroyComponents использует как раз это свойство.
PageControl.Pages[1].DestroyComponents не найдет ни одного компонента, принадлежащего ему, и поэтому не освободит ничего (не путай Owner с Parent).


zzmeyz, да, это можно сделать, написав что-то типа
Код

with PageControl.Pages[1] do 
  for i := 1 to ControlCount do 
    if (Controls[0].Name <> 'Button1') and (Controls[0].Name <> 'Button2')
    then Controls[0].Free;

PM MAIL ICQ   Вверх
Sunvas
Дата 17.11.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

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



Цитата(zzmeyz @  17.11.2006,  12:19 Найти цитируемый пост)
 Если точнее, нужно чтоб остались две кнопки.

У каждого компонента есть свойство tag те кнопки, которые на надо удалять присвой tag = 1 и при удалении проверяй.
Вот те пример:
Код

if PageControl1.Pages[0].ControlCount>0 then
with PageControl1.Pages[0] do
  for i := 0 to ControlCount-1 do if Controls[i].tag<>1 then Controls[i].Free;


Это сообщение отредактировал(а) Sunvas - 17.11.2006, 14:55


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Rennigth
Дата 17.11.2006, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Объявляешь массив контролов которые не надо удалять, аля:
Код

FNonFreeControls: TDynPointerArray;

в него добавляешь свои кнопки которые не надо удалять:
Код

SetLength(FNonFreeControls, 2);
FNonFreeControls[0] := Button1;
FNonFreeControls[1] := Button2;


При удалении проверяешь что-бы их не удалять:
Код

var
  i: Integer;
  function ControlNeedFree(AControl: TControl): Boolean;
  var
    j: Integer;
  begin
    Result := True;
    for j := Low(FNonFreeControls) to High(FNonFreeControls) do
      if TControl(FNonFreeControls) =  AControl then
      begin
        Result := False;
        Break;  
      end;
  end;
begin
  with PageControl.Pages[1] do 
    for i := PageControl.Pages[1].ControlsCount - 1 downto 0 do 
      if ControlNeedFree(Controls[i]) then
        Controls[i].Free;
end;


Это сообщение отредактировал(а) Rennigth - 17.11.2006, 13:06


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Alexeis
Дата 17.11.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Rennigth @  17.11.2006,  13:04 Найти цитируемый пост)
При удалении проверяешь что-бы их не удалять:

Не нужно в методе Free уже имеется такая проверка.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rennigth
Дата 17.11.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



alexeis1
Цитата(zzmeyz @  17.11.2006,  12:19 Найти цитируемый пост)
Еще вопрос: можно ли выбирать компоненты, которые удалять не нужно? Если точнее, нужно чтоб остались две кнопки. 

Я имел ввиду проверять контролы которые не надо удалять smile



Это сообщение отредактировал(а) Rennigth - 17.11.2006, 14:38


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
digs
Дата 17.11.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



popolzen
Ну да, извиняюсь не подумал.
Я просто привык удалять лишь то, что сам руками создаю
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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