繁体   English   中英

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

[英]How to properly implement a Custom Locked State Image in cxgrid in Delphi?

我正在使用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方法

问题是,使用TcxLockedStatePaintHelperGetImage准备状态图像的过程中会造成你所遇到的堆栈溢出。 这是因为在完全准备好映像之前,调用GetImage将导致映像准备就绪(在这种情况下,将再次进行准备)。

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

type
  TcxLockedStatePaintHelperAccess = class(TcxLockedStatePaintHelper);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM