【问题标题】:Virtual TreeView update hint within cell on mouse move鼠标移动时单元格内的虚拟 TreeView 更新提示
【发布时间】:2011-07-19 23:21:12
【问题描述】:

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

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

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

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

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

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

有人有什么想法吗?

谢谢

更新

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

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

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

【问题讨论】:

    标签: delphi delphi-2010 virtualtreeview


    【解决方案1】:

    在靠近顶部的TBaseVirtualTree.CMHintShow 中,代码如下:

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

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

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

    【讨论】:

    • 查看我上面关于提示不会再次显示的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    相关资源
    最近更新 更多