![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перечисление компонентов
Заур © (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. Вот по нему м выдает.