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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2012, 19:44   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию Управление внутренним содержимым TGroupBox, TPanel и других контейнеров, кроме формы...

Доброго времени!

Есть TGroupBox, в нем 5-6 TCheckBox.
Задачи:
1. Опция "Выделить все"
2. Опция "Отменить все"
3. Опция "Инвертировать выбор"

Проблемы:
Как TGroupBox может управлять своим содержимым?
Он контейнер, по тому у него есть Components и Controls свойства.
С Components вообще что-то не работает.

А вот с Controls получается:
Код:
procedure TCatViewForm.InvertSelectBtnClick(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to ImgsGr.ControlCount - 1 do //ImgsGr - TGroupBox
  begin
   // if (Controls[i] is TCheckBox) then - не канает 
   if (Controls[i] is TComponent) then  //Сюда попадаем и переходим во внутрь
    begin
      if ((Controls[i] as TComponent) is TCheckBox) then //А сюда уже не поподаем. 

      begin
        if ((Controls[i] as TComponent) as TCheckBox).Checked then
          ((Controls[i] as TComponent) as TCheckBox).Checked := False
        else
          ((Controls[i] as TComponent) as TCheckBox).Checked := True;
      end;

    end;
  end;
end;
Как быть?


Списки, Form.ComnonentsCount - не предлагать, зачем геморой если компонент уже все это имеет и умеет.
Человек_Борща вне форума Ответить с цитированием
Старый 22.10.2012, 19:48   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Так контролы чьи? форменные, а вам надо боксовые...
eval вне форума Ответить с цитированием
Старый 22.10.2012, 19:50   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Controls[i] is TComponent
это ваще шикарно он уже ТКонтрол ...

Цитата:
if ((Controls[i] as TComponent) as TCheckBox).Checked then
((Controls[i] as TComponent) as TCheckBox).Checked := False
else
((Controls[i] as TComponent) as TCheckBox).Checked := True;
... := not ...

Последний раз редактировалось eval; 22.10.2012 в 20:04.
eval вне форума Ответить с цитированием
Старый 22.10.2012, 20:19   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так, например
Код:
procedure TForm1.Button5Click(Sender: TObject);
var i: Integer;
begin
  for i:=0 to GroupBox1.ControlCount-1 do
    if GroupBox1.Controls[i] is TCheckBox then TCheckBox(GroupBox1.Controls[i]).Checked:=True;
end;
Но Parent у этого CheckBox-а должен быть именно GroupBox1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.10.2012, 20:21   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Внутри TGroupBox лежат какие-то наследники TComponent. Как ими массово управлять?


UPDATe
Нашел фэил..
Код:
procedure TCatViewForm.InvertSelectBtnClick(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to ImgsGr.ControlCount - 1 do //ImgsGr - TGroupBox
  begin
   // if (Controls[i] is TCheckBox) then - не канает 
   if (Controls[i] is TComponent) then  //Сюда попадаем и переходим во внутрь
    begin
      if ((Controls[i] as TComponent) is TCheckBox) then //А сюда уже не поподаем. 

      begin
        if ((Controls[i] as TComponent) as TCheckBox).Checked then
          ((Controls[i] as TComponent) as TCheckBox).Checked := False
        else
          ((Controls[i] as TComponent) as TCheckBox).Checked := True;
      end;

    end;
  end;
end;
А Controls[i]-то форменные

Солюшен:
Код:
procedure TCatViewForm.InvertSelectBtnClick(Sender: TObject);
var
  i: Integer;
begin
  with ImgsGr do
  begin
    for i := 0 to ControlCount - 1 do
      if (Controls[i] is TCheckBox) then
        TCheckBox(Controls[i]).Checked := not TCheckBox(Controls[i]).Checked;
  end;
end;

Тема закрыта. Вопрос решен.

Последний раз редактировалось Человек_Борща; 22.10.2012 в 20:27.
Человек_Борща вне форума Ответить с цитированием
Старый 22.10.2012, 20:24   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
if GroupBox1.Controls[i] is TCheckBox then тра-ля-ля
else if (GroupBox1.Controls[i] is TEdit) and (TEdit(GroupBox1.Controls[i]).Tag=15) then ...
и т.д.
Там не могут быть наследники просто TComponent, а именно TControl
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 22.10.2012 в 20:28.
Аватар вне форума Ответить с цитированием
Старый 22.10.2012, 20:41   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Но Parent у этого CheckBox-а должен быть именно GroupBox1
Они как бы в другом случае на GroupBox1 не находились бы.
eval вне форума Ответить с цитированием
Старый 22.10.2012, 20:45   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Они как бы в другом случае на GroupBox1 не находились бы
Почему же? Не прямо, а через другой контейнер. Бросить на GroupBox Panel, а на нее тот же CheckBox. А если у панели еще границы убрать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.10.2012, 20:54   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Человек_Борща говорит что они именно в нем. А с панелями и др. контейнерами , конечно, надо рекурсию делать.
А еще проще сразу загнать их в какой список, и потом вот эти цыклы с приведением типов не делать., хотя если их там не много, то и ладно.
eval вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление внутренним зонированием многофункционалного объекта коммерческой недвижимости. Doc888 Помощь студентам 1 15.06.2012 21:05
Найти все трехзначные простые числа ( большее 1, не имеющее других делителей, кроме 1 и самого себя) Вложенный цикл Кристина Н Паскаль, Turbo Pascal, PascalABC.NET 14 02.12.2011 20:08
А на других дисках (кроме С) есть невидимые папки? DeKot Операционные системы общие вопросы 2 22.01.2010 07:46
Dock-инг TGroupBox внутри Tpanel Квэнди Общие вопросы Delphi 6 10.08.2009 08:14
Цвет у TGroupBox такой же как у формы. Ozerich Компоненты Delphi 1 05.09.2008 15:43