如何在Delphi中的cxgrid中正确实现自定义锁定状态映像?

如何在Delphi中的cxgrid中正确实现自定义锁定状态映像?,delphi,devexpress,vcl,tcxgrid,Delphi,Devexpress,Vcl,Tcxgrid,我正在使用Delphi10.2 Tokyo,并希望在Tcxgrid(DevExpress VCL 18.2)的后代中实现一个自定义的“锁定状态映像” 我试图覆盖DoPrepareLockedStateImageprotected方法,如下所示: function TZcxGrid.DoPrepareLockedStateImage: Boolean; begin    Result: = False;    if Assigned (OnPrepareLockedStateImage) the

我正在使用Delphi10.2 Tokyo,并希望在Tcxgrid(DevExpress VCL 18.2)的后代中实现一个自定义的“锁定状态映像”

我试图覆盖
DoPrepareLockedStateImage
protected方法,如下所示:

function TZcxGrid.DoPrepareLockedStateImage: Boolean;
begin
   Result: = False;

   if Assigned (OnPrepareLockedStateImage) then
     OnPrepareLockedStateImage (Self, LockedStatePaintHelper.GetImage, Result)
   else
     DoLockedStateImage (Self, LockedStatePaintHelper.GetImage, Result);
end;
上述实现的方法导致堆栈溢出,因为
LockedStatePaintHelper.GetImage
从网格调用
DoPrepareLockedStateImage

这是实现此功能的方法吗


注意:我在支持中心或DevExpress常见问题解答中未找到主题。我刚刚找到一个主题,解释了如何使用cxgrid的
OnPrepareLockedStateImage
方法

问题是,在准备状态映像期间使用
TcxLockedStatePaintHelper
GetImage
会导致堆栈溢出。这是因为在映像完全准备好之前,调用
GetImage
将导致映像准备就绪(在本例中是一次又一次)

通过使用访问器直接访问受保护的
位图
属性,可以避免这种情况。使用
DoLockedStateImage
(绘制另一个图像的实现)您的方法如下所示:

type
  TcxLockedStatePaintHelperAccess = class(TcxLockedStatePaintHelper);

function TZcxGrid.DoPrepareLockedStateImage: Boolean;
begin
  DoLockedStateImage(Self, TcxLockedStatePaintHelperAccess(LockedStatePaintHelper).Bitmap, Result);
  Result := inherited DoPrepareLockedStateImage;
end;

问题在于,在准备状态映像期间使用
tcxlockedstatepainthhelper
GetImage
会导致堆栈溢出。这是因为在映像完全准备好之前,调用
GetImage
将导致映像准备就绪(在本例中是一次又一次)

通过使用访问器直接访问受保护的
位图
属性,可以避免这种情况。使用
DoLockedStateImage
(绘制另一个图像的实现)您的方法如下所示:

type
  TcxLockedStatePaintHelperAccess = class(TcxLockedStatePaintHelper);

function TZcxGrid.DoPrepareLockedStateImage: Boolean;
begin
  DoLockedStateImage(Self, TcxLockedStatePaintHelperAccess(LockedStatePaintHelper).Bitmap, Result);
  Result := inherited DoPrepareLockedStateImage;
end;

谢谢,但我需要叫我的抽屉“DoLockedStateImage”谢谢,但我需要叫我的抽屉“DoLockedStateImage”