2

我使用 TVirtualStringTree 作为网格,效果很好。

当用户将鼠标放在单元格上时,我正在使用树视图提示功能来显示提示。 我不得不将 HintMode 更改为 hmHint,因为无论单元格文本长度如何,我都希望我的提示出现。

我现在要做的是根据鼠标在单元格内的位置显示不同的提示。

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

我看不到在提示显示和鼠标在同一单元格内移动时更新提示的方法

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

有人有什么想法吗?

谢谢

更新

经过一番调查后,我发现它可以帮助某人提出解决方案:

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

如果我将 CursorRect 设置为小于单元格边界的值,则提示将更新。我在几个地方出于不同的目的使用了 VT,所以我不能直接进行这些更改。获得不需要此更改的解决方案会很好。

4

1 回答 1

1

TBaseVirtualTree.CMHintShow靠近顶部的地方,代码如下:

if PtInRect(FLastHintRect, HintInfo.CursorPos) then
  Exit;

如果您将此注释掉,则该行为更接近您正在寻找的行为。如果您在同一个单元格内移动鼠标,提示窗口将不会再次显示,但如果您单击,它将再次显示。

我似乎找不到任何方法让提示窗口显示在同一个单元格中,而无需单击鼠标!

于 2011-03-21T22:03:39.813 回答