我正在使用TVirtualStringTree作为一个工作得很好的网格。
我正在使用treeviews提示功能在用户将鼠标放在单元格上时显示提示。 我必须将HintMode更改为hmHint,因为无论单元格文本长度如何,我都希望显示提示。
我现在要做的是根据鼠标在单元格中的位置显示不同的提示。
在使用OnGetHint事件显示提示之前,我可以做到这一点没问题。我的问题是,只有当用户将鼠标移动到另一个单元格时才会引发此事件。
我看不到在显示提示时更新提示的方法,并且鼠标在同一个单元格中移动
我看过其他控件的建议,使用了应用程序的OnShowHint事件,但它们似乎只是让提示消失而不再显示。
有人有任何想法吗?
由于
更新
经过一些调查后,我发现了以下情况,以防有人提出解决方案:
CMHintShow方法将HintInfo记录的CursoRect字段设置为单元格的边界。这似乎会阻止VCl再次触发提示代码,直到鼠标移出此矩形(TApplication.HintMouseMessage)。
如果我将CursorRect设置为小于单元格边界的值,则提示将更新。我在一些地方使用VT用于不同的目的,所以我不能直接进行这些更改。获得一个不需要这种改变的解决方案会很好。
答案 0 :(得分:1)
在靠近顶部的TBaseVirtualTree.CMHintShow
中,代码显示为:
if PtInRect(FLastHintRect, HintInfo.CursorPos) then
Exit;
如果您对此进行评论,则行为更接近您要查找的内容。如果您在同一个单元格中移动鼠标,则不会再次显示提示窗口,但如果您单击则会显示。
我似乎无法找到任何方法让提示窗口显示在同一个单元格中而不用鼠标点击!