powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить список компонент на форме.
13 сообщений из 13, страница 1 из 1
Получить список компонент на форме.
    #32117880
Eugeni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Как получить список компонент на форме как в Object TreeView в Delphi.
Т.е. мне нужно построить дерево, как они располагаются на форме(что во что входит).
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32117893
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У TComponent, от которого и порождена TForm, есть свойство Components. Попробуй им воспользоваться.
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32117901
Eugeni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Список компонент я получаю вот так

for i:=0 to form1.ComponentCount-1 do
begin
treeview1.Items.Add(nil,form1.Components .Name+':'+form1.Components.ClassName);
end;

А как определить какой в какой входит
Например на Panel1 лежит Label1 и Combobox1
Надо что-то вроде
- panel1
| |
| |_Label1
| |
| |_Combobox1
|
|_panel2
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32117904
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда поднимайся на уровень выше, до TControl, а у него есть Parent.
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32117977
Eugeni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получил список компонент которые лежат на Form1.
for i:=0 to form1.ComponentCount-1 do
begin
treeview1.Items.Add(nil,form1.Controls .Name+':'+form1.Controls.ClassName);
end;
Результат
_Panel1
|
|_Panel2
А теперь мне бы взять form1.Controls и получить что лежит на них
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32117985
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если попробовать рекурсивно пробежаться. Тыж тока для формы посмотрел, а для Panel1 и Panel2 нет.
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32117990
Eugeni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом и вопрос как взать Panel1 и Panel2, если я в цикле получаю их как
form1.Controls.Name=Panel1
form1.Controls.Name=Panel2
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32118016
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не у что значит как, тыж не только имя можешь получить, но и сылку на сам экземпляр TControl. Начни с формы, а затем рекурсивно по всем Controls.
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32118048
Eugeni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
procedure TForm1.FindControls(Control:TControl;Node:TTreenode);
 var
  i:integer;
 begin
 for i:= 0  to Control.componentcount - 1  do (componentcount= 0  ????)
   treeview1.Items.AddChild(node,Control.Components[i].Name+':'+Control.Components[i].ClassName);
 end;
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32118066
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну почему же так:

Код: plaintext
1.
2.
for i:= 0  to Control.componentcount - 1  do (componentcount= 0  ????)
   treeview1.Items.AddChild(node,Control.Components].Name+':'+Control.Components[i].ClassName);
 end;


Так вот не пробовал:

Код: plaintext
1.
2.
for i:= 0  to Control.ControlCount - 1  do
  treeview1.Items.AddChild(node,Control.Controls[i].Name+':'+Control.Controls[i].ClassName);
 end;
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32118083
Eugeni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Undeclared identifier: 'ControlCount'
Undeclared identifier: 'Controls'
Control:TControl-???
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32118089
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виноват, через TWinControl попробуй.
...
Рейтинг: 0 / 0
Получить список компонент на форме.
    #32118141
Eugeni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо через TWinControl покатило
Написал так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure TForm1.FindControls(Control:TWinControl;Node:TTreenode);
 var
  i:integer;
  tnode:TTreeNode;
 begin
 for i:= 0  to Control.ControlCount - 1  do
  begin
   tnode:=treeview1.Items.AddChild(node,Control.Controls[i].Name+':'+Control.Controls[i].ClassName);
   FindControls(TWinControl(Control.Controls[i]),tNode);
  end;
 end;

Но Control.ControlCount иногда такое число получается (типа 2534562, или -5674838) это когда контролов нет. Когда минусы не страшно, а когда + Ж:-()
Как проверить есть контролы или нет, типа HasChild
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить список компонент на форме.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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