Delphi 鼠标移动时单元格内的虚拟树视图更新提示

Delphi 鼠标移动时单元格内的虚拟树视图更新提示,delphi,delphi-2010,virtualtreeview,Delphi,Delphi 2010,Virtualtreeview,我使用TVirtualStringTree作为网格,它运行得非常好 我使用treeviews提示功能在用户将鼠标放置在单元格上时显示提示我必须将HintMode更改为hmHint,因为我希望无论单元格文本长度如何都能显示提示。 我现在要做的是根据鼠标在细胞内的位置显示不同的提示 在使用OnGetHint事件显示提示之前,我可以做到这一点。我的问题是,只有在下次用户将鼠标移动到另一个单元格时才会引发此事件 当提示显示且鼠标在同一单元格内移动时,我找不到更新提示的方法 我已经研究了其他控件的建议,使

我使用TVirtualStringTree作为网格,它运行得非常好

我使用treeviews提示功能在用户将鼠标放置在单元格上时显示提示我必须将HintMode更改为hmHint,因为我希望无论单元格文本长度如何都能显示提示。

我现在要做的是根据鼠标在细胞内的位置显示不同的提示

在使用OnGetHint事件显示提示之前,我可以做到这一点。我的问题是,只有在下次用户将鼠标移动到另一个单元格时才会引发此事件

当提示显示且鼠标在同一单元格内移动时,我找不到更新提示的方法

我已经研究了其他控件的建议,使用应用程序的OnShowHint事件,但它们似乎只是使提示消失而不再显示

有人有什么想法吗

谢谢

更新

经过一些调查后,我发现这有助于某人想出解决方案:

CMHintShow方法将HintInfo记录的CursoRect字段设置为单元格的边界。这似乎会阻止VCl再次触发提示代码,直到鼠标移出此矩形(TApplication.HintMouseMessage)


如果我将CursorRect设置为小于单元格边界的值,提示将更新。我在一些地方出于不同的目的使用VTs,因此无法直接进行这些更改。最好得到一个不需要此更改的解决方案。

TBaseVirtualTree.CMHintShow
顶部附近,代码如下:

if PtInRect(FLastHintRect, HintInfo.CursorPos) then
  Exit;
如果你对此进行评论,那么你的行为就更接近你所寻找的。如果在同一单元格内移动鼠标,提示窗口将不会再次显示,但如果单击,则会再次显示


我似乎找不到任何方法,使提示窗口显示在同一单元格中,但没有鼠标点击

关于提示为何不再显示,请参见上面的编辑