Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перечисление компонентов


Заур ©   (2005-08-24 12:15:00) 

Доброго времени дня

Мне необходимо создать список всех контролов в приложении.Написал такую вот процедуру

procedure TMainForm.BuildListOfCompsClick(Sender: TObject);
var
 i: integer;
 CN: string; //имя компонента
 CC: string;//caption
 CH: string;//hint

 IniFile: TIniFile;
begin
 WipeFile(ExtractFilePath(Application.ExeName) + 'ListOfComponents.ini');
 IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) +
   'ListOfComponents.ini');
 IniFile.WriteString(Self.Name, 'Creation Date', DateToStr(now()));
 for i := 0 to Self.ComponentCount - 1 do
 begin

   if Self.Components[i].name = '' then
     Continue;
   CN := Self.Components[i].Name;
   try
     if Self.Components[i] is TListBox then
     begin
       //CC:=TLabel(Self.Components [i]).Caption;
       CH := TListBox(Self.Components[i]).Hint;
       //IniFile.WriteString('ListBoxies',CN,CC);
       IniFile.WriteString('HINTS', CN + 'Hnt', CH);
     end;
     if Self.Components[i] is TLabel then
     begin
       CC := TLabel(Self.Components[i]).Caption;
       CH := TLabel(Self.Components[i]).Hint;
       IniFile.WriteString('Labels', CN, CC);
       IniFile.WriteString('HINTS', CN + 'Hnt', CH);
     end;
     if Self.Components[i] is TButton then
     begin
       CC := TButton(Self.Components[i]).Caption;
       CH := TButton(Self.Components[i]).Hint;
       IniFile.WriteString('Buttons', CN, CC);
       IniFile.WriteString('HINTS', CN + 'Hnt', CH);
     end;
     if Self.Components[i] is TTabSheet then
     begin
       CC := TTabSheet(Self.Components[i]).Caption;
       CH := TTabSheet(Self.Components[i]).Hint;
       IniFile.WriteString('Sheets', CN, CC);
       IniFile.WriteString('HINTS', CN + 'Hnt', CH);
     end;
     if Self.Components[i] is TCheckBox then
     begin
       CC := TCheckBox(Self.Components[i]).Caption;
       CH := TCheckBox(Self.Components[i]).Hint;
       IniFile.WriteString('CheckBoxies', CN, CC);
       IniFile.WriteString('HINTS', CN + 'Hnt', CH);
и т.д

она работает без проблем , только вот в пределах одной формы. а мне необходимо просмотреть все формы проекта .Как это можно реализовать?
Заренее благодарен за ответ


Теплый снег   (2005-08-24 13:49:00) [1]

> Заур   (24.08.05 13:15) [8]
> мультиязычное приложение пишу ...Не хочу вручную все компоненты
> в ини файл загонять :)

Так есть же ITE.

Не перевелись ещё на Руси Ефимы Артамоновы...//

Ну что вы в самом деле :) Может человек хочет разобраться как это вручную делается


DiamondShark   (2005-08-24 13:41:00) [2]


> Заур   (24.08.05 13:15) [8]
> мультиязычное приложение пишу ...Не хочу вручную все компоненты
> в ини файл загонять :)

Так есть же ITE.

Не перевелись ещё на Руси Ефимы Артамоновы...


Игорь Шевченко   (2005-08-24 13:39:00) [3]

Заур   (24.08.05 13:15) [8]


> мультиязычное приложение пишу


ITE - рулез фарева.

Project|Languages|Add...


Теплый снег   (2005-08-24 13:22:00) [4]

/Юрий Зотов ©   (24.08.05 12:39) [5]

> Заур   (24.08.05 12:19) [3]

> нужно получить список всех форм проекта

Для этого нужно, чтобы в момент построения списка все формы были уже созданы. Если в проекте все они входят в спиcок автоматически создаваемых форм, то так он и будет, а если нет, то за этим Вы должны проследить сами.

У автоматически создаваемых форм владельцем является Application - и тогда все очень просто:

for i := 0 to Application.ComponentCount - 1 do
if Application.Components[i] is TForm then
  with TForm(Application.Components[i]) do
  begin
    ... // Здесь работаем с формой
  end;

У форм, создаваемых Вами, владельца Вы сами и указываете. Если это тоже Application, то код сработает и для них./

А помоему лучше так
procedure Tforma1.Button4Click(Sender: TObject);
Var
i : Integer;
j : Integer;
a:string;
Begin
for i:=0  to Screen.FormCount-1 do

  for j:=  Screen.Forms[i].ComponentCount - 1 downto 0 do
  IF Screen.Forms[i].Components[j] is TLabel
  Then TLabel(Screen.Forms[i].Components[j]).Caption:='Labelz'+IntToStr(j);

end;


Заур   (2005-08-24 13:15:00) [5]

мультиязычное приложение пишу ...Не хочу вручную все компоненты в ини файл загонять :)


Игорь Шевченко   (2005-08-24 12:58:00) [6]


> Мне нужно получить список всех форм проекта ,а потом уже
> обращаться к ним ..,


Если не секрет, зачем такая нужда ?


Заур   (2005-08-24 12:40:00) [7]

Разобрался ... :)
огромное спасибо всем


Юрий Зотов   (2005-08-24 12:39:00) [8]

> Заур   (24.08.05 12:19) [3]

> нужно получить список всех форм проекта

Для этого нужно, чтобы в момент построения списка все формы были уже созданы. Если в проекте все они входят в спиcок автоматически создаваемых форм, то так он и будет, а если нет, то за этим Вы должны проследить сами.

У автоматически создаваемых форм владельцем является Application - и тогда все очень просто:

for i := 0 to Application.ComponentCount - 1 do
 if Application.Components[i] is TForm then
   with TForm(Application.Components[i]) do
   begin
     ... // Здесь работаем с формой
   end;

У форм, создаваемых Вами, владельца Вы сами и указываете. Если это тоже Application, то код сработает и для них.

P.S.
Зачем писать Self в явном виде, если он и без того подразумевается по умолчанию?


Skyle   (2005-08-24 12:30:00) [9]


> [2] DiamondShark ©   (24.08.05 12:18)
>
> >  мне необходимо просмотреть все формы проекта
>
> Screen.Forms


Заур   (2005-08-24 12:19:00) [10]

это ясно... Мне нужно получить список всех форм проекта ,а потом уже обращаться к ним ..,


DiamondShark   (2005-08-24 12:18:00) [11]


>  мне необходимо просмотреть все формы проекта

Screen.Forms


dmitry501   (2005-08-24 12:17:00) [12]

Ну ты же пишешь Self.Components[i]
А кто Self(?) - TMainForm. Вот по нему м выдает.


Наверх

Титульная страница Поиск, карта сайта Написать письмо