Delphi 从另一个单元扩展类

Delphi 从另一个单元扩展类,delphi,helper,class-helpers,Delphi,Helper,Class Helpers,我们可以扩展任何类,以便: TColumn = class(FMX.Grid.TColumn) private FId: Integer; public property Id: Integer read FId write FId; end; 这在我们自己的单元中运行良好,但是如果我们尝试这个(Grid:TGrid在表单上): 我们得到一个错误: [dcc32错误]uHelpers.pas(136):E2010不兼容类型: “uHelpers.TColumn”和“FMX.Grid.

我们可以扩展任何类,以便:

TColumn = class(FMX.Grid.TColumn)
private
  FId: Integer;
public 
  property Id: Integer read FId write FId;
end;
这在我们自己的单元中运行良好,但是如果我们尝试这个(
Grid:TGrid
在表单上):

我们得到一个错误:

[dcc32错误]uHelpers.pas(136):E2010不兼容类型:
“uHelpers.TColumn”和“FMX.Grid.TColumn”


任何扩展
FMX.Grid.TColumn
类以使过程
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;

你的问题是范围界定。既然已经有了FMX.Grid.TColumn,为什么还要调用类TColumn?你希望编译器能分辨出两者的区别吗?称你为TMY列。现在网格在什么时候得到了一个tmycolumn集合?从来没有。那是一个完全不同的问题!我很理解这个问题和我关于这个问题的问题。这完全不可能?这是可能的。用另一种方式去做。不,你的问题不是范围界定。您的问题是网格不会创建列类的实例。@DavidHeffernan是对的。列对象是网格中的
FMX.Grid.TColumn
实例。无法将它们分配到TColumn类型并使用其id属性,因为该属性不存在。
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;