![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TComponent, а как "детей" определить? [D7, WinXP]
Arbiter © (2005-02-03 11:08:00)Появилась необходимость сделать автоматически формирующийся INI файл, куда будут записаны значения Caption, Text и др. значения компонентов размещённых в программе.
Всё дело встало когда возник вопрос:"Получил я компонент (TComponent), узнал что это потомок TButton, а как свойства выдрать?"
Erik1 (2005-02-03 12:12:00) [1]PropInfo := TypInfo.GetPropInfo(Control.ClassInfo, 'Caption');
if Assigned(PropInfo) and Assigned(PropInfo.GetProc) then
GetOrdProp(Control, PropInfo, ....)
Вполне надежный метод, учитывая, что нужныые свойства находятся в published.
Ega23 (2005-02-03 11:55:00) [2]2 Александр Иванов © (03.02.05 11:23) [7]
Он компилироваться не будет.
Да я прямо тут набирал, по-памяти. Сейчас посмотрел, действительно TControl.Caption в protected-секции сидит. Ну, тогда явное приведение потомков от TControl надо.
asafr (2005-02-03 11:24:00) [3]PathBase - это просто название, которое м.б. любым... Просто тупо скопировал...
asafr (2005-02-03 11:23:00) [4]
var
Ini:TIniFile;
i:integer;
begin
Ini:=TIniFile.Create(ChangeFileExt( Application.ExeName,'.INI'));
for i:=0 to Form1.ControlCount-1 do
if (Form1.Controls[i] is TButtonChild) then
begin
Ini.WriteString('PathBase','PathBase',(Form1.Controls[i] as TButtonChild).Caption);
Ini.WriteString('PathBase','PathBase',(Form1.Controls[i] as TButtonChild).Name);
end;
Ini.Free
end;
Александр Иванов (2005-02-03 11:23:00) [5]Ega23 © (03.02.05 11:18) [5]
Он компилироваться не будет.
Ega23 (2005-02-03 11:18:00) [6]WriteLn(F, Form1.Controls[i].Caption); Уверен?
Нет, конечно. Если захочет - разберётся куда и что писать...
Александр Иванов (2005-02-03 11:17:00) [7]Александр Иванов © (03.02.05 11:16) [3]
Да, не заметил коммент, приведения нужно.
Digitman (2005-02-03 11:16:00) [8]если интересуют лишь заранее известные тебе заведомо существующие св-ва (public или published они - неважно в дан.случае), то прочитать, например, то же св-во TButton.Caption проще пареной репы :
TButton(SomeComponent).Caption - читаем св-во Caption
Александр Иванов (2005-02-03 11:16:00) [9]Ega23 © (03.02.05 11:12) [1]
WriteLn(F, Form1.Controls[i].Caption); Уверен?
Ega23 (2005-02-03 11:12:00) [10]Получил я компонент (TComponent), узнал что это потомок TButton,
Ничего не путаешь?
По сабжу:
for i:=0 to Form1.ControlCount-1 do
begin
WriteLn(F, Form1.Controls[i].Caption); // за Caption не уверен, у некоторых в protected может быть вынесено
WriteLn(F, Form1.Controls[i].Name);
......
end;