Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让ShowHint使用几个不同的rect在自定义控件上工作,每个rect都有自己的提示 使用C++ Builder 2009 _C++_Delphi_C++builder_Vcl - Fatal编程技术网

让ShowHint使用几个不同的rect在自定义控件上工作,每个rect都有自己的提示 使用C++ Builder 2009

让ShowHint使用几个不同的rect在自定义控件上工作,每个rect都有自己的提示 使用C++ Builder 2009 ,c++,delphi,c++builder,vcl,C++,Delphi,C++builder,Vcl,我有一个从TCustomControl继承的自定义控件,在该控件上我绘制了几个带有内容的正方形(TRect) 我现在想在每一个方块上显示提示,但我不确定如何最好地实现这一点 我试图简单地使用TCustomControl的ShowHint,并在我将鼠标悬停在方块上时更改Hint,但问题是控件在首次消失后不再显示提示,除非我离开控件并返回到它。 我希望在从一个正方形悬停到另一个正方形时可以简单地“重置”它的状态,但它不起作用 假设我的方法是错误的开始,请让我知道我应该做什么,以获得预期的效果 if

我有一个从
TCustomControl
继承的自定义控件,在该控件上我绘制了几个带有内容的正方形(
TRect

我现在想在每一个方块上显示提示,但我不确定如何最好地实现这一点

我试图简单地使用
TCustomControl
ShowHint
,并在我将鼠标悬停在方块上时更改
Hint
,但问题是控件在首次消失后不再显示提示,除非我离开控件并返回到它。 我希望在从一个正方形悬停到另一个正方形时可以简单地“重置”它的状态,但它不起作用

假设我的方法是错误的开始,请让我知道我应该做什么,以获得预期的效果

if (State == rsHover && Item->FState != rsHover) // Not in the rsHover state yet, but going to
    {
    if (Item->Hint.Length())
        {
        if (ShowHint)
            {
            // Attempt to reset Hint's internal working, to no avail
            Hint = L"" ;
            ShowHint = false ;
            }

        Hint = Item->Hint ;

        ShowHint = true ;
        }
    else
        {
        ShowHint = false ;
        }
    }
else if (State != rsHover)
    {
    ShowHint = false ;
    }

实现此功能的正确方法是让组件处理
CM\u HINTSHOW
消息。消息的
LParam
值将是指向记录的指针,您可以根据需要自由修改其字段(特别是
HintStr
CursorRect

要访问该记录,您可以

  • 直接将
    LParam
    类型转换为
    thintifo*

  • 键入将整个
    TMessage
    转换为,然后访问其
    HintInfo
    字段


通过定义自己的
CursorRect
矩形,您可以“[将控件]划分为几个提示区域”,每个区域具有不同的
HintStr
值。
CursorPos
字段指示鼠标在控件中的当前位置。当鼠标移动到当前
CursorRect
之外时,控件将收到一条新的
CM_HINTSHOW
消息,您可以根据需要更新
CursorRect
HintStr
字段。

实现此功能的正确方法是让您的组件处理
CM_HINTSHOW
消息。消息的
LParam
值将是指向记录的指针,您可以根据需要自由修改其字段(特别是
HintStr
CursorRect

要访问该记录,您可以

  • 直接将
    LParam
    类型转换为
    thintifo*

  • 键入将整个
    TMessage
    转换为,然后访问其
    HintInfo
    字段


通过定义自己的
CursorRect
矩形,您可以“[将控件]划分为几个提示区域”,每个区域具有不同的
HintStr
值。
CursorPos
字段指示鼠标在控件中的当前位置。当鼠标移动到当前
CursorRect
之外时,控件将收到一条新的
CM_HINTSHOW
消息,您可以根据需要更新
CursorRect
HintStr
字段。

这可能不会直接解决您的问题,但对于更复杂的提示场景,我在以下方面很幸运:(1)在我想要的坐标中创建不可见的TGraphicsControl(即,不绘制任何内容的TGraphicsControl),并指定它们的提示属性。(2) 使用JVCL的TJvBalloonHint。为什么会有delphi标记?这可能不能直接解决您的问题,但对于更复杂的提示场景,我很幸运地做到了以下几点:(1)在我想要的坐标中创建不可见的TGraphicsControl(即,不绘制任何内容的TGraphicsControl),并指定它们的提示属性。(2) 使用JVCL的TJvBalloonHint。为什么会有delphi标记?谢谢,这是一个简单明了的实现。实际上,我有点困惑这与
CustomHint
有什么关系。这两个提示都是不同的,可以同时使用,或者一个提示可以取代另一个提示(如果指定)?
CustomHint
使用完全不同的机制来显示提示。它根本没有绑定到基于
的应用程序
的提示系统中。如果分配了
CustomHint
,它将接管提示管理,并且您的组件除了提供显示的字符串(通过其正常的
hint
属性)之外,根本无法影响该系统的行为。谢谢,这是一个简单明了的实现。实际上,我有点困惑这与
CustomHint
的关系。这两个提示都是不同的,可以同时使用,或者一个提示可以取代另一个提示(如果指定)?
CustomHint
使用完全不同的机制来显示提示。它根本没有绑定到基于
的应用程序
的提示系统中。如果分配了
CustomHint
,它将接管提示管理,并且您的组件除了提供显示的字符串(通过其正常的
hint
属性)之外,根本无法影响该系统的行为。