Форум: "Основная";
Текущий архив: 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.015 c