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

时间:2018-09-17 13:46:42

标签: delphi devexpress vcl tcxgrid

我正在使用Delphi 10.2 Tokyo,并且希望在Tcxgrid(DevExpress VCL 18.2)的后代中实现自定义的“锁定状态图像”。

我尝试如下重写受DoPrepareLockedStateImage保护的方法:

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方法

1 个答案:

答案 0 :(得分:2)

问题在于,在准备状态映像期间使用TcxLockedStatePaintHelper的{​​{1}}会导致您遇到的堆栈溢出。这是因为在完全准备好映像之前,调用GetImage将导致映像准备就绪(在这种情况下,将再次进行准备)。

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

DoLockedStateImage