如何在Delphi中的cxgrid中正确实现自定义锁定状态映像?
我正在使用Delphi10.2 Tokyo,并希望在Tcxgrid(DevExpress VCL 18.2)的后代中实现一个自定义的“锁定状态映像” 我试图覆盖如何在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
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”