powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Рекурсивный обходи всех компонент на форме
14 сообщений из 14, страница 1 из 1
Рекурсивный обходи всех компонент на форме
    #39769848
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрых суток,

Может есть у кого готовая функция которая обходит рекурсивно все компоненты на форме (компоненты созданы динамически и у них разный родитель).
Проблем в том что при обычном "сканировании" через ControlCount выходят только объекты лежащие на форме, а вот дочерние объекты увы не видно.

Так лень писать данную функцию и в интернете с наскока не нашел, может у кого есть готовая?

Спасибо.
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39769853
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
  for I := 0 to Pred(ComponentCount) do
  begin
    if Components[I].InheritsFrom(TControl) then
      ...
  end;
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39769854
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost Writer,

Увы , но нет.

Функция не видит дочерние объекты которые созданы динамически и у которых владельцем и отцом является родительский компонент.
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39769856
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а цикл по controls?
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39769857
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, не все компоненты являются контролами. Стормозил...
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39769858
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23у которых владельцем и отцом является родительский компонент.

а ты в качестве owner указывай форму
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39769859
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18439058

Код: pascal
1.
2.
3.
Label_1 := TLabel.Create(Self);
//vs
Label_2 := TLabel.Create(Nil);  
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39769860
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39770270
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поборол свою лень :)


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure SearchComponents(perComponent:TWinControl);
var
i:integer;
begin
for i:=0 to perComponent.ControlCount-1 do
  begin
  Memo1.Lines.Add(perComponent.Controls[i].Name);
  SearchComponents(TWinControl(perComponent.Controls[i]))
  end;
end;

...

procedure TfmTemplateOfInventory.Button1Click(Sender: TObject);
begin
SearchComponents(GroupBox1)
end;
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39770273
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23и у которых владельцем и отцом является родительский компонент.
А зачем так делать?
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39770279
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanА зачем так делать?
Там просто дочерний объект тогда не в границах родительского объекта.
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39770281
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23wadmanА зачем так делать?
Там просто дочерний объект тогда не в границах родительского объекта.
Кривой объект? Если в дизайне его расположить как нужно, то аналогично получается, что владелец не форма?
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39770282
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23Поборол свою лень :)
пять строк кода и целый топик
...
Рейтинг: 0 / 0
Рекурсивный обходи всех компонент на форме
    #39770331
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure SearchComponents(perComponent:TWinControl);
var
i:integer;
begin
for i:=0 to perComponent.ControlCount-1 do
  begin
  Memo1.Lines.Add(perComponent.Controls[i].Name);
  SearchComponents(TWinControl(perComponent.Controls[i]))
  end;
end;

А теперь положи на форму TLabel

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
type
  TEnumControlsProc = function (AControl: TControl): Boolean of object;

procedure EnumControls(AParent: TWinControl; const AEnumProc: TEnumControlsProc);
var
  Li: Integer;
  LControl: TControl;
begin
  for Li := 0 to AParent.ControlCount - 1 do begin
    LControl := AParent.Controls[Li];
    if AEnumProc(LControl) and (LControl is TWinControl) then
      EnumControls(TWinControl(LControl), AEnumProc);
  end;
end;
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Рекурсивный обходи всех компонент на форме
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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