加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 当编译器说“在基类中找不到”时,如何覆盖方法?

发布时间:2020-12-15 09:34:58 所属栏目:大数据 来源:网络整理
导读:我有一个自定义组件,它是从TCustomListView派生的. 我需要覆盖一个方法,特别是GetImageIndex方法,但我似乎无法访问它. 我正在制作的组件需要表现得像TListView,但没有很多已发布的属性和方法,因为我将在组件中创建自己的组件,因此我从TCustomListView派生它.
我有一个自定义组件,它是从TCustomListView派生的.

我需要覆盖一个方法,特别是GetImageIndex方法,但我似乎无法访问它.

我正在制作的组件需要表现得像TListView,但没有很多已发布的属性和方法,因为我将在组件中创建自己的组件,因此我从TCustomListView派生它.

在我的组件中,我尝试访问GetImageIndex,如下所示:

TMyListView = class(TCustomListView)
  strict protected
    procedure GetImageIndex(Sender: TObject; Item: TListItem); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
end;

procedure TMyListView.GetImageIndex(Sender: TObject; Item: TListItem);
begin
  inherited;
  // Make my changes
end;

显然,出于示例的目的,缩短了上述内容.

我遇到了一个编译错误:

Method GetImageIndex not found in base class

如何从我的组件访问和覆盖此方法?这些类型的方法将不会在运行时发布或提供,因为我将进行组件所需的更改,因此我想知道如何访问和更改它?

根据David Heffernan提供的信息,我有一个有效的解决方案.他确实提供了一种实现这种方式的代码和另一种方式的信息,所提供的代码对我来说仍然很麻烦所以我试图做他所说的选项1.

这里是:

protected
    procedure GetImageIndex(Sender: TObject; Item: TListItem); // note not to override

和构造函数:

constructor TMyListView.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  OnGetImageIndex := GetImageIndex;
end;

如果这仍然是错误的请告诉我,但从快速初步测试我认为没有问题.

解决方法

TCustomListView.GetImageIndex方法是一种非虚方法.你无法覆盖它.

您在此处进行自定义的选项包括:

>为OnGetImageIndex事件提供事件处理程序.
>在CN_NOTIFY消息处理程序中处理LVN_GETDISPINFOA和LVN_GETDISPINFOW通知代码,并在那里提供您自己的自定义行为.

前一种选择应该是显而易见的.后一个选项如下所示:

type
  TMyListView = class(TCustomListView)
  protected
    procedure CNNotify(var Message: TWMNotifyLV); message CN_NOTIFY;
  end;
....
procedure TMyListView.CNNotify(var Message: TWMNotifyLV);
begin
  case Message.NMHdr.code of
  LVN_GETDISPINFOA,LVN_GETDISPINFOW:
    ; // add your customisation here
  else
    inherited;
  end;
end;

请注意,您可以选择在所有方案中调用inherited,然后再应用自定义.这一切都取决于您的需求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读