CollectionItem 下未声明的标识符 "ComponentState"
Undeclared identifier "ComponentState" under CollectionItem
为什么 ComponentState
来自波纹管的代码在 CollectionItem
class 下无法被 Delphi 识别。
备注:在TMyComp
方法下有效。
uses
System.Classes, ...
type
TMyComp = class(TComponent)
...
TColumnsItem = class(TCollectionItem)
private
FWidth: Integer;
procedure SetWidth(const Value: Integer);
protected
function GetDisplayName: String; override;
procedure SetIndex(Value: Integer); override;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
published
property Width: Integer read FWidth write SetWidth default 90;
end;
procedure TColumnsItem.SetWidth(const Value: Integer);
begin
if FWidth <> Value then
begin
FWidth:= Value;
if csDesigning in ComponentState then //Undeclared identifier 'ComponentState' ???
begin
//do something...
end;
Changed(False);
end;
end;
ComponentState
是 TComponent
下的 属性。
要在 TCollectionItem
下使用需要定义一个 FOwner
属性 到 TComponent
并像这样使用:
if csDesigning in FOwner.ComponentState then
begin
//do something...
end;
为什么 ComponentState
来自波纹管的代码在 CollectionItem
class 下无法被 Delphi 识别。
备注:在TMyComp
方法下有效。
uses
System.Classes, ...
type
TMyComp = class(TComponent)
...
TColumnsItem = class(TCollectionItem)
private
FWidth: Integer;
procedure SetWidth(const Value: Integer);
protected
function GetDisplayName: String; override;
procedure SetIndex(Value: Integer); override;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
published
property Width: Integer read FWidth write SetWidth default 90;
end;
procedure TColumnsItem.SetWidth(const Value: Integer);
begin
if FWidth <> Value then
begin
FWidth:= Value;
if csDesigning in ComponentState then //Undeclared identifier 'ComponentState' ???
begin
//do something...
end;
Changed(False);
end;
end;
ComponentState
是 TComponent
下的 属性。
要在 TCollectionItem
下使用需要定义一个 FOwner
属性 到 TComponent
并像这样使用:
if csDesigning in FOwner.ComponentState then
begin
//do something...
end;