Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.09.2009, 13:55
Eugene86 Eugene86 вне форума
Прохожий
 
Регистрация: 29.08.2009
Сообщения: 31
Репутация: 10
По умолчанию Количество компонентов на Panel

Как узнать количество компонентов на Panel или GroupBox.
Когда использую
Код:
GroupBox.ComponentCount
возвращается всё время 0, хотя элементы на Box'e присутствуют.
Ответить с цитированием
  #2  
Старый 16.09.2009, 23:09
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Похоже, что придется считать в цикле (с учетом свойства Parent) ...
Ответить с цитированием
  #3  
Старый 16.09.2009, 23:19
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Как вариант, что-то вроде этого :
Код:
procedure TForm1.Button3Click(Sender: TObject);
Var
  c,i : integer;
begin
  c:=0;
  for i:=0 to (Form1.ComponentCount-1) do
   begin
     if (Form1.Components[i] is TControl) then begin
        if ((Form1.Components[i] as TControl).Parent.Name='GroupBox1') then c:=c+1;
     end;
  end;
  ShowMessage('Count='+IntToStr(c));
end;
Ответить с цитированием
  #4  
Старый 17.09.2009, 00:49
Eugene86 Eugene86 вне форума
Прохожий
 
Регистрация: 29.08.2009
Сообщения: 31
Репутация: 10
По умолчанию

Придётся перебирать все компоненты формы, чтобы узнать, что расположено в GroupBox? На форме до фига компонентов. Программа работать будет слишком медленно.
Ответить с цитированием
  #5  
Старый 17.09.2009, 01:05
Eugene86 Eugene86 вне форума
Прохожий
 
Регистрация: 29.08.2009
Сообщения: 31
Репутация: 10
По умолчанию

Расскажу подробней зачем это надо.
Программа делает отчёты. Пользователь выбирает из RadioGroup тип отчёта. Появляется Panel или GroupBox, на которой он (пользователь) может устанавливать параметры отчёта.
Например, отчёт по одной фабрике, или по двум, или...и т.д.
Поля для ввода фабрики, по которым делается отчёт, создаются динамически. Пользователь нажимает кнопку "Добавить фабрику" и в GroupBox появляется ещё одно поле. Количество этих полей должно равняться количеству столбцов в отчёте (1 столбец - 1 фабрика).
Вот для этого и нужно посчитать количество полей?
Просматривать каждый компонент формы слиииишкооом дооолгооо.
Ответить с цитированием
  #6  
Старый 17.09.2009, 01:27
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Вы говорили о компонентах :
Цитата:
Как узнать количество компонентов на Panel или GroupBox.

а не о "полях"..
Ответить с цитированием
  #7  
Старый 17.09.2009, 01:43
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Насколько я помню, свойство ComponentCount (у TComponent) отражает кол-во "дочерних" компонент, для которых он является Владельцем.
Когда Вы кидаете какой-то компонент на другой (на форме) , то форма становится владельцем.
Но можно сделать так :
Код:
procedure TForm1.Button4Click(Sender: TObject);
Var
  Lab : TLabel;
begin
  Lab:= TLabel.Create(GroupBox1);  //!!!
  Lab.Parent:=GroupBox1;
  ShowMessage('Кол-во='+IntToStr(GroupBox1.ComponentCount));
end;

Но здесь есть один нюанс.
Когда владельцем компонента является форма - она сама же освобождает ресурсы (при уничтожении формы).

А в случае, когда владелец - НЕ форма - придется программисту самому отслеживать "мусор".
Ответить с цитированием
  #8  
Старый 08.01.2010, 17:38
TilliWilli TilliWilli вне форума
Прохожий
 
Регистрация: 08.01.2010
Сообщения: 1
Репутация: 10
По умолчанию

Чтобы узнать количество компонентов на GroupBox надо обратиться к свойству ControlCount, т.е. GroupBox.ControlCount = равно количество элементов которые находятся на боксе. А свойство ComponentCount это другое сам незнаю чо)))
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter