powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перебрать программно все TLabel в групбоксе?
11 сообщений из 11, страница 1 из 1
Как перебрать программно все TLabel в групбоксе?
    #39863770
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть GroupBox типа TcxGroupBox. На ней несколько TLabel.
Задача стоит перебрать все лейблы и выбранную пометить ярким цветом, остальные серым.
Делаю так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure HighlightStateView(AGroupBox: TcxGroupBox; ALabel: TLabel);
var
  i: integer;
begin
  for i := 0 to AGroupBox.ComponentCount - 1 do
    begin
      if (AGroupBox.Components[i] is TLabel) then
        begin
          if ((AGroupBox.Components[i] as TLabel) = ALabel) then
            DisplayLbState((AGroupBox.Components[i] as TLabel), 2) // Отображает ярким цветом
          else
            DisplayLbState((AGroupBox.Components[i] as TLabel), 1) // Отображает серым цветом
        end;
    end;
end;


Но при отладке получается, что AGroupBox.ComponentCount равно нулю.
...
Рейтинг: 0 / 0
Как перебрать программно все TLabel в групбоксе?
    #39863776
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ControlCount
...
Рейтинг: 0 / 0
Как перебрать программно все TLabel в групбоксе?
    #39863782
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и соответственно не Components[i], а Controls[i]
...
Рейтинг: 0 / 0
Как перебрать программно все TLabel в групбоксе?
    #39863784
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrControlCount
Спасибо! Так заработало:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure HighlightStateView(AGroupBox: TcxGroupBox; ALabel: TLabel);
var
  i: integer;
begin
  for i := 0 to AGroupBox.ControlCount - 1 do
    begin
      if (AGroupBox.Controls[i] is TLabel) then
        begin
          if ((AGroupBox.Controls[i] as TLabel) = ALabel) then
            DisplayLbState((AGroupBox.Controls[i] as TLabel), 2)
          else
            DisplayLbState((AGroupBox.Controls[i] as TLabel), 1)
        end;
    end;
end;


Чем же Components от Controls отличается?
...
Рейтинг: 0 / 0
Как перебрать программно все TLabel в групбоксе?
    #39863786
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladDimaBrControlCount
Спасибо! Так заработало:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure HighlightStateView(AGroupBox: TcxGroupBox; ALabel: TLabel);
var
  i: integer;
begin
  for i := 0 to AGroupBox.ControlCount - 1 do
    begin
      if (AGroupBox.Controls[i] is TLabel) then
        begin
          if ((AGroupBox.Controls[i] as TLabel) = ALabel) then
            DisplayLbState((AGroupBox.Controls[i] as TLabel), 2)
          else
            DisplayLbState((AGroupBox.Controls[i] as TLabel), 1)
        end;
    end;
end;



Чем же Components от Controls отличается?
Не только лишь все компоненты контролы.
...
Рейтинг: 0 / 0
Как перебрать программно все TLabel в групбоксе?
    #39863787
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladЧем же Components от Controls отличается?
Буквами
...
Рейтинг: 0 / 0
Как перебрать программно все TLabel в групбоксе?
    #39863801
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как перебрать программно все TLabel в групбоксе?
    #39864038
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladЧем же Components от Controls отличается?
Есть два понятия: владелец (owner) и родитель (parent). Владелец компонента, когда вызывают его деструктор, удалит и все компоненты, которыми владеет. Владелец (owner) всех компонентов на форме - форма.
Родитель - это то, на чем визуально расположен элемент управления.
Свойство TComponent.Components перечисляет все компоненты, которыми владеет данный компонент. Свойство TWinControl.Controls перечисляет все элементы управления, которые являются детьми (child controls) по отношению к данному оконному элементу управления.
Ваш GroupBox является родителем (parent) для лейблов, но не владельцем (owner). Владелец - форма, на которой всё это. Соответственно, лейблы перечислены в свойстве Controls групбокса и в свойстве Components формы.
...
Рейтинг: 0 / 0
Как перебрать программно все TLabel в групбоксе?
    #39864081
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62Свойство TComponent.Components перечисляет все компоненты, которыми владеет данный компонент. Свойство TWinControl.Controls перечисляет все элементы управления, которые являются детьми (child controls) по отношению к данному оконному элементу управления.
наконец-то, и я узнал :)

svnvladЗадача стоит перебрать все лейблы
можно использовать InheritForm
Код: pascal
1.
2.
if AGroupBox.Controls[i].InheritForm(TLabel) then
...
...
Рейтинг: 0 / 0
Как перебрать программно все TLabel в групбоксе?
    #39864177
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так будет еще лучше
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure HighlightStateView(AGroupBox: TcxGroupBox; ALabel: TLabel);
var
  i: integer;
begin
  for i := 0 to AGroupBox.ControlCount - 1 do
    begin
      if AGroupBox.Controls[i] is TLabel then
        begin
          if AGroupBox.Controls[i] = ALabel then
            DisplayLbState(TLabel(AGroupBox.Controls[i]), 2)
          else
            DisplayLbState(TLabel(AGroupBox.Controls[i]), 1)
        end;
    end;
end;
...
Рейтинг: 0 / 0
Как перебрать программно все TLabel в групбоксе?
    #39864213
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure HighlightStateView(AGroupBox: TcxGroupBox; ALabel: TLabel);
var i: integer;
begin
  for i := 0 to AGroupBox.ControlCount - 1 do
    if AGroupBox.Controls[i] is TLabel then
      DisplayLbState(TLabel(AGroupBox.Controls[i]), AGroupBox.Controls[i] = ALabel);
end;
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перебрать программно все TLabel в групбоксе?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]