从另一个单元扩展 class
Extending class from another unit
我们可以扩展任何 class 所以:
TColumn = class(FMX.Grid.TColumn)
private
FId: Integer;
public
property Id: Integer read FId write FId;
end;
这在我们自己的单元中工作正常,但如果我们尝试这个(Grid: TGrid
在表格上):
procedure ChangeId;
var
Col: TColumn;
begin
Col := Grid.Columns[0];
Col.Id := 0;
end;
我们遇到错误:
[dcc32 Error] uHelpers.pas(136): E2010 Incompatible types:
'uHelpers.TColumn' and 'FMX.Grid.TColumn'
有什么方法可以扩展 FMX.Grid.TColumn
class 以使程序 ChangeId
正确吗?
这是可能的,但我们应该在运行时手动添加列:
TIdColumn = class(FMX.Grid.TColumn)
private
FId: Integer;
public
property Id: Integer read FId write FId;
end;
Grid.AddObject(TIdColumn.Create(Grid));
procedure ChangeId;
var
Col: TIdColumn;
begin
Col := Grid.Columns[0] as TIdColumn;
Col.Id := 0;
end;
我们可以扩展任何 class 所以:
TColumn = class(FMX.Grid.TColumn)
private
FId: Integer;
public
property Id: Integer read FId write FId;
end;
这在我们自己的单元中工作正常,但如果我们尝试这个(Grid: TGrid
在表格上):
procedure ChangeId;
var
Col: TColumn;
begin
Col := Grid.Columns[0];
Col.Id := 0;
end;
我们遇到错误:
[dcc32 Error] uHelpers.pas(136): E2010 Incompatible types:
'uHelpers.TColumn' and 'FMX.Grid.TColumn'
有什么方法可以扩展 FMX.Grid.TColumn
class 以使程序 ChangeId
正确吗?
这是可能的,但我们应该在运行时手动添加列:
TIdColumn = class(FMX.Grid.TColumn)
private
FId: Integer;
public
property Id: Integer read FId write FId;
end;
Grid.AddObject(TIdColumn.Create(Grid));
procedure ChangeId;
var
Col: TIdColumn;
begin
Col := Grid.Columns[0] as TIdColumn;
Col.Id := 0;
end;