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;