Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

Перечисление компонентов   Найти похожие ветки 

 
Заур   (2005-08-24 12:15) [0]

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

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

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);
и т.д

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


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

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


 
DiamondShark ©   (2005-08-24 12:18) [2]


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

Screen.Forms


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

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


 
Skyle ©   (2005-08-24 12:30) [4]


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


 
Юрий Зотов ©   (2005-08-24 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, то код сработает и для них.

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


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

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


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


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


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


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

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


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

/Юрий Зотов ©   (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:39) [10]

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


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


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

Project|Languages|Add...


 
DiamondShark ©   (2005-08-24 13:41) [11]


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

Так есть же ITE.

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


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

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

Так есть же ITE.

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.09.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.038 c
1-1124722779
SH@RK
2005-08-22 18:59
2005.09.18
Как создать документ с формулами (дроби, корни и т.п.)


4-1122539982
fixer
2005-07-28 12:39
2005.09.18
проблемка с Popupmenu


14-1125068503
P.N.P.
2005-08-26 19:01
2005.09.18
Фрилансер


14-1124977560
OldNaum
2005-08-25 17:46
2005.09.18
Новоуральск )


14-1124725264
Santrope
2005-08-22 19:41
2005.09.18
Посоветуйте прогу аля msconfig ?