【发布时间】:2016-08-06 20:41:47
【问题描述】:
如何获取组件属性变量的动态值
在我的组件中,我有一个名为 ColorDefault 的字段,我希望能够在程序中动态设置它的值。
原始代码
var // global
_V_TB_DefaultColor: TColor
type
TMyClass = class
...
property ColorDefault: tcolor read _V_TB_DefaultColor write FDefaultColor;
//[dcc32 Error] MyButton.pas(85): E2168 Field or method identifier expected
...
end;
编辑:
我按照汤姆描述的方式进行了如下操作,但是颜色没有根据全局变量而改变,颜色保持在编译时的状态,例如我的全局颜色是 clyellow,我编译了我的组件并将其放在表单上,然后我将全局颜色变量更改为 clwhite,当我运行程序时它仍然是 clyellow
type
TTestClass = class(TPanel)
private
{ Private declarations }
protected
{ Protected declarations }
FColorDefault:tcolor;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function GetGlobalColorVariable:TColor;
published
{ Published declarations }
property DefaultColor:TColor read GetGlobalColorVariable write FColorDefault;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyComponents', [TTestClass]);
end;
constructor TTestClass.Create(AOwner: TComponent);
begin
ColorInitiate;
inherited;
color:=DefaultColor;
end;
destructor TTestClass.Destroy;
begin
inherited;
end;
function TTestClass.GetGlobalColorVariable: TColor;
begin
result:=_V_TB_DefaultColor;
end;
end.
【问题讨论】:
-
如果你想从另一个变量中读取属性值,
FDefaultColor字段没有多大意义 -
我没有看到
ColorDefault的任何属性声明,也没有看到_V_TB_DefaultColor的任何声明。请与您的标识符保持一致。这个问题与您最初提出的问题不同,并且变得一团糟。您是否阅读过有关属性的文档?如果你想改变一个属性,你必须给它分配一个新值。 -
如果您希望
ColorDefault属性发生变化,只需更改_V_TB_DefaultColor答案是否定的,这不会发生,没有这样的自动。我在答案中添加了一段关于此的内容。 -
请@Emre,不要更改您的帖子,以免以前写的答案失效。在这些情况下,最好添加新代码而不删除旧代码。我从您的第一个 cmets 添加了代码,所以让我们清理和删除过时的 cmets。如果您将鼠标移到您的评论上,您的评论后会出现一个圆形按钮。用它来删除。
-
@TomBrunberg 抱歉,我需要习惯使用论坛 :) 我确实删除了我的 cmets
标签: delphi variables components