微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 delphi 中创建一个 TStringGrid 类,其中与单元格关联的对象数组被指定为更具体的类型

如何解决在 delphi 中创建一个 TStringGrid 类,其中与单元格关联的对象数组被指定为更具体的类型

在 Delphi 中,如何创建一个从 TStringGrid 类派生的类,以便与网格单元格关联的 TObject 数组具有更具体的类型,例如用于指定单元格颜色的 TColor?

>

解决方法

type
  TStringColorGrid = class(TStringGrid)
  private
    function GetColor(ACol,ARow: Integer): TColor;
    procedure SetColor(ACol,ARow: Integer; AValue: TColor);
  public
    property Colors[ACol,ARow: Integer]: TColor read GetColor write SetColor;
  end;

function TStringColorGrid.GetColor(ACol,ARow: Integer): TColor;
begin
  Result := TColor(inherited Objects[ACol,ARow]);
end;

procedure TStringColorGrid.SetColor(ACol,ARow: Integer; AValue: TColor);
begin
  inherited Objects[ACol,ARow] := TObject(AValue);
end;
,

TStringGrid 可以为每个单元格保存一个 TObject。 TColor 不是从 TObject 继承的,所以它不起作用。

您可以将 TColor 转换为 TObject,但这将是一个容易出现未来问题的糟糕解决方案。并且这不适用于任何类型(仅那些最多具有指针大小的类型)。

最好的解决方案是将您的数据“装箱”到 TObject 中,并将此类对象的实例保存到 StringGrid 中。

TMyBoxingColorObject = class
    Data : TColor;           // Or any other datatype
end;

不要忘记根据需要创建和释放对象!

如果要装箱的类型很多,也可以使用泛型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。