Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

свойство в строку [D7, WinXP]


Klopan ©   (2006-01-23 21:29:00) 

как введя в edit строку типа form1.button1.left, определить значение свойства left?

в какую сторону копать? или все просто?


Джо   (2006-01-23 22:37:00) [1]

Принцип такой.


uses TypInfo;

function GetPropertyValue(FormName,ComponentName,PropertyName: string): Variant;

function FindForm (AFormName: string): TForm;
var
 I: Integer;
begin
 Result := nil;
 for I := 0 to Screen.FormCount-1 do
 if Screen.Forms[I].Name = AFormName then
 begin
   Result := Screen.Forms[I];
   Break
 end
end;

var
 I: Integer;
 Form: TForm;
 Component: TComponent;
begin
 Form := FindForm (FormName);
 if not Assigned (Form) then
   raise Exception.CreateFmt ('Form %s not found',[FormName]);

 Component := Form.FindComponent(ComponentName);
 if not Assigned (Component) then
   raise Exception.CreateFmt ('Component %s not found',[ComponentName]);

 if GetPropInfo(Component,PropertyName) = nil then
   raise Exception.CreateFmt ('Property %s not found',[PropertyName]);

 Result := GetPropValue (Component,PropertyName);
end;

///
/// Пример использования
///

procedure TForm1.Button1Click(Sender: TObject);
var
 EdLeft: Integer;
begin
 EdLeft := GetPropertyValue('Form1','Edit1','Left');
 ShowMessageFmt ('%d',[EdLeft]);
end;


В качестве домашнего задания предоставляю написать процедуру, преобразующую строку вида 'FormName.ComponentName.PropertyName' в три отдельные строки, для того, чтобы скормит их моей функции :)


Klopan   (2006-01-23 22:05:00) [2]

спасибо большое! и правда до обеда :)


sniknik   (2006-01-23 21:37:00) [3]

копать надо в RTTI вестимо... и до обеда. ;о)


Наверх

Титульная страница Поиск, карта сайта Написать письмо