开发者_如何学运维Say I have
type
TLight = class
private
Ftimer : TTimer;
property IsAutoRotating: Boolean read Ftimer.Enabled;
Obviously, this doesn't compile, but why not and how to solve this (preferably without keeping that state in a seperate var.
Your code won't compile because the property read and write specifiers must either refer to a field or method of the class. Ftimer.Enabled
is neither of these.
To implement the IsAutoRotating
property, you'll need to create a getter function:
type
TLight = class
private
Ftimer : TTimer;
function GetIsAutoRotating: Boolean;
public
property IsAutoRotating: Boolean read GetIsAutoRotating;
end;
function TLight.GetIsAutoRotating : Boolean;
begin
Result := Ftimer.Enabled;
end;
The getter and setter of a property should be a method of the class or it's parent - or - a field of the class or it's parent.
Since FTimer.Enabled is neither the above construct won't work. You might create a getter function and setter procedure that will return this property of FTimer (getter) and set this property of FTimer (setter):
type:
property Enabled: Boolean read GetEnabled write SetEnabled;
now press CTRL-SHIFT-C for class completion. The 2 methods are now created for you.
In the getter type:
Result := FTimer.Enabled;
In the setter type:
FTimer.Enabled := Value;
Et voila!
.
精彩评论