Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
Заур   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1123684855
shu
2005-08-10 18:40
2005.09.18
TThread.Execute не вызывается


3-1122964892
MakNik
2005-08-02 10:41
2005.09.18
обновление dxDBGrid...


5-1099298516
akvilon
2004-11-01 11:41
2005.09.18
Как реализован редактор свойства DataSource в TDBEdit?


14-1125120486
Sergey Masloff
2005-08-27 09:28
2005.09.18
Проапгрейдить домашний комп.


4-1122008031
Ronin
2005-07-22 08:53
2005.09.18
Активность потока.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский