我正在使用Delphi 5,我们有一种方法可以根据数据库表的内容动态创建某些控件(我们主要创建TButtons)并在点击这些控件时采取行动.这允许我们向表单添加简单控件,而无需重新编译应用程序.
我想知道是否可以根据字符串中包含的属性名称设置组件的属性,以便我们可以设置更多选项.
伪代码:
Comp := TButton.Create(Self);
// Something like this:
Comp.GetProperty('Left').AsInteger := 100;
// Or this:
Comp.SetProperty('Left', 100);
Run Code Online (Sandbox Code Playgroud)
这有可能吗?
Dan*_*ski 13
您必须使用Delphi 的运行时类型信息功能来执行此操作:
这个博客准确描述了你要做的事情:Delphi中的运行时类型信息 - 它可以为你做任何事吗?
基本上你必须获取属性信息,使用GetPropInfo然后SetOrdProp用来设置值.
var
PropInfo: PPropInfo;
begin
PropInfo := GetPropInfo(Comp.ClassInfo, 'Left');
if Assigned(PropInfo) then
SetOrdProp(Comp, PropInfo, 100);
end;
Run Code Online (Sandbox Code Playgroud)
这不像你的伪代码那么简洁,但它仍然可以完成这项工作.此外,它与其他内容(如数组属性)相比也变得更加复杂.
Ede*_*com 10
来自我的一个工作单位(虽然在Delphi 7中)
var
c : TComponent;
for i := 0 to pgcProjectEdits.Pages[iPage].ControlCount - 1 do
begin
c := pgcProjectEdits.Pages[iPage].Controls[i];
if c is TWinControl
then begin
if IsPublishedProp(c,'color')
then
SetPropValue(c,'color',clr);
if IsPublishedProp(c,'readonly')
then
SetPropValue(c,'readonly', bReadOnly );
...
end;
...
Run Code Online (Sandbox Code Playgroud)
您必须TypInfo在uses语句中包含.不知道这是否适用于Delphi 5.
| 归档时间: |
|
| 查看次数: |
8635 次 |
| 最近记录: |