让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
属性)之外,根本无法影响该系统的行为。