如何同时具有工具提示和提示提示模式?

时间:2019-04-29 18:26:42

标签: delphi virtualtreeview tvirtualstringtree

在Windows中,如果一列太窄而无法显示全文,则tooltip会以内联方式显示,并可以向您显示缺少的文本:

enter image description here

请注意,提示窗口是内联,其中显示了文本(即,它不在节点的“ ”之下)

这等同于VirtualTreeview HintMode hmToolTip

  TVTHintMode = (
    hmDefault,            // show the hint of the control
    hmHint,               // show node specific hint string returned by the application
    hmHintAndDefault,     // same as hmHint but show the control's hint if no node is concerned
    hmTooltip             // show the text of the node if it isn't already fully shown
  );
  • hmTooltip :如果尚未完全显示节点,则显示该节点的文本

还有提示;不只是工具提示

Explorer还具有显示提示的功能,这是一个提示窗口,可将窗口悬停在所悬停的单元格 near lowness 下方

enter image description here

这在hmHint的VirtualTreeview中是等效的:

  • hmHint :显示应用程序返回的特定于节点的提示字符串

然后您处理 OnGetHint 事件。

为什么不是两个?

现在遇到了阻力:Windows同时执行两个功能,

  • 向您显示全文(如果已截断)(ala hmTooltip
  • 以及允许我添加更多文本(ala hmHint

enter image description here

但是,如果没有其他要显示的文本,则应该继续仅显示内联工具提示:

enter image description here

如果还不止于此,只需多余的文字:

enter image description here

我想要那个!

我该怎么做?

研究成果

  • 如果我将 HintMode 设置为hmTooltip,则OnGetHint不会触发(并且我永远也没有机会添加自定义信息)
  • 如果我将 HintMode 设置为hmHint(或hmHintAndDefault),则会触发OnGetHint事件,但是树将不再显示截止部分
  • 如果 HintMode hmHint,则显示的提示将从不是内联;但会始终位于单元格下方

这样的功能可能吗?至少我想我必须重新发明所有的单元格测量方法,以弄清原位文本是否被截断。

  • 但我获得OnGetHint事件的唯一方法
  • 通过将 HintMode 设置为hmHint
  • 但如果 HintMode hmHint
  • 那么提示将永远不会就位
  • 但是如果我将 HintMode 设置为hmTooltip以使其就位
  • 我永远不会获得OnGetHint事件
  • goto 10

奖金阅读

编辑:澄清

我讨厌这样做,因为它暗示了可以寻求的答案或途径。但是想象下面的真值表:

OnGetHint  IsTreeTextClipped  Hint
=========  =================  ==================
Empty      No                 No hint
Empty      Yes                Inline tooltip
Non-empty  No                 Hint below; shows only GetHint text only
Non-empty  Yes                Hint below; show both TreeText+CRLF+GetHint text

问题是,如果调用OnGetHint,则永远不会有内联工具提示

  • 您可以叫({{1)}的 OnGetHint
  • 或者您可以使用内嵌工具提示(hmHint
  • 但您永远不会调用 OnGetHint ,如果它什么也不返回,请遵循hmTooltip模式

如何调用 OnGetHint ,并且如果不返回任何内容,请转为hmTooltip模式?

当然,没有任何事情表明 OnGetHint 必须参与其中。那只是如何将提示文本获取到VirtualTrees进行处理的一个示例。

0 个答案:

没有答案