Dynamically access a property in a Delphi component
delphi, dynamic
Solution
You have to use the Run-Time Type Information features of Delphi to do this:
This blog describes exactly what you are trying to do: Run-Time Type Information In Delphi - Can It Do Anything For You?
Basically you have to get the property information, using `GetPropInfo` and then use `SetOrdProp` to set the value.
uses TypInfo;
var
PropInfo: PPropInfo;
begin
PropInfo := GetPropInfo(Comp.ClassInfo, 'Left');
if Assigned(PropInfo) then
SetOrdProp(Comp, PropInfo, 100);
end;
This is not as concise as your pseudo-code, but it still does the job. Also it gets more complicated with other stuff, like array properties.
Problem
I'm using Delphi 5, and we have a method to dynamically create certain controls based on the contents of a database table (we create TButtons mostly) and take action when those are clicked. This allows us to add simple controls to a form without having to recompile the application. I was wondering if it was possible to set a component's property based on a property name contained in a string so we could set further options. Pseudo-code: ``` Comp := TButton.Create(Self); // Something like this: Comp.GetProperty('Left').AsInteger := 100; // Or this: Comp.SetProperty('Left', 100); ``` Is this possible at all?