如何在 Delphi 中的 cxgrid 中正确实现自定义锁定状态图像?
How to properly implement a Custom Locked State Image in cxgrid in Delphi?
我正在使用 Delphi 10.2 Tokyo 并希望在 Tcxgrid (DevExpress VCL 18.2) 的后代中实现自定义 "locked state image"。
我尝试重写 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
方法
问题是在准备状态图像期间使用 TcxLockedStatePaintHelper
的 GetImage
会导致您遇到堆栈溢出。这是因为在图像完全准备好之前调用 GetImage
将导致图像准备好(在这种情况下一次又一次)。
通过使用访问器直接访问受保护的 Bitmap
属性 可以避免这种情况。使用 DoLockedStateImage
(您绘制另一幅图像的实现)您的方法将如下所示:
type
TcxLockedStatePaintHelperAccess = class(TcxLockedStatePaintHelper);
function TZcxGrid.DoPrepareLockedStateImage: Boolean;
begin
DoLockedStateImage(Self, TcxLockedStatePaintHelperAccess(LockedStatePaintHelper).Bitmap, Result);
Result := inherited DoPrepareLockedStateImage;
end;
我正在使用 Delphi 10.2 Tokyo 并希望在 Tcxgrid (DevExpress VCL 18.2) 的后代中实现自定义 "locked state image"。
我尝试重写 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
方法
问题是在准备状态图像期间使用 TcxLockedStatePaintHelper
的 GetImage
会导致您遇到堆栈溢出。这是因为在图像完全准备好之前调用 GetImage
将导致图像准备好(在这种情况下一次又一次)。
通过使用访问器直接访问受保护的 Bitmap
属性 可以避免这种情况。使用 DoLockedStateImage
(您绘制另一幅图像的实现)您的方法将如下所示:
type
TcxLockedStatePaintHelperAccess = class(TcxLockedStatePaintHelper);
function TZcxGrid.DoPrepareLockedStateImage: Boolean;
begin
DoLockedStateImage(Self, TcxLockedStatePaintHelperAccess(LockedStatePaintHelper).Bitmap, Result);
Result := inherited DoPrepareLockedStateImage;
end;