delphi - 如何在 OnHint 事件处理程序中检测提示发送者控制?
问题描述
在 Delphi 10.3.3 Windows VCL 应用程序中,在组件的OnHint
事件处理程序中TApplicationEvents
,我在状态栏中显示当前提示:
procedure TForm1.ApplicationEvents1Hint(Sender: TObject);
begin
statMain.SimpleText := Application.Hint;
end;
但是,我想添加一些包含特定运行时数据的特定文本,具体取决于哪个控件发送提示。
不幸的是,该Sender
参数没有提供该信息。
那么如何检测哪个控件发送了提示呢?
解决方案
该OnHint
事件不提供对有关显示提示的控件的任何信息的访问。
但是,OnShowHint
事件确实如此,您可以在该事件中完全自定义提示:
procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string;
var CanShow: boolean; var HintInfo: THintInfo);
begin
if HintInfo.HintControl = DesiredControl then
begin
// customize HintStr, and/or HintInfo fields, as needed...
end;
end;
procedure TForm1.ApplicationEvents1Hint(Sender: TObject);
begin
statMain.SimpleText := Application.Hint;
end;
提供有关您可以自定义的提示的HintInfo
各种信息:
HintControl 正在进行
提示处理的控件的名称。HintWindowClass
提示窗口控件的类。默认值为 THintWindow,但您可以指定从 THintWindow 派生的任何类。如果您想用自定义提示窗口代替 THintWindow,请使用此字段。HintPos
提示窗口左上角在屏幕坐标中的默认位置。通过更改此值来更改窗口出现的位置。HintMaxWidth
开始自动换行之前提示窗口的最大宽度。默认情况下,该值是屏幕的宽度(全局 Screen 变量的 Width 属性)。HintColor
提示窗口的背景颜色。CursorRect
用户鼠标指针必须位于的矩形,提示窗口才会出现。CursorRect 的默认值是控件的客户矩形。更改此值,以便可以将单个控件划分为多个提示区域。当用户将鼠标指针移到矩形外时,提示窗口消失。CursorPos
鼠标指针在控件内的位置。ReshowTimeout
提示系统在再次询问提示状态之前应该等待多长时间。默认情况下,该字段为零,表示提示状态不会改变。将其设置为非零值将导致提示在请求的毫秒数过去后采取行动,就好像用户将鼠标移出提示矩形并重新移入一样。这可用于推迟提示处理一段时间时间,或允许定期更新提示。HideTimeout
显示提示的毫秒数。默认情况下,它设置为 Application 变量的 HintHidePause 属性的值。HintStr
要在提示窗口中显示的字符串。这允许 OnHint 事件处理程序在显示之前修改提示的内容。默认情况下,它包含 GetShortHint 函数在传递 Application 变量的 Hint 属性值时返回的值。HintData
要传递给提示窗口控件的附加数据。将此字段与 HintWindowClass 结合使用。
另外,仅供参考,您不需要使用TApplication(Event).OnHint
事件来TApplication.Hint
显示TStatusBar
. 如果将 StatusBar 的AutoHint
属性设置为 true,则 StatusBar 可以TApplication.Hint
自动显示更新。您只需要确保您没有OnHint
分配处理程序,否则AutoHint
将无法工作(OnShowHint
虽然很好)。
推荐阅读
- android - android中的Firebase子事件监听器
- python-3.x - PyQT5 如何在 QScrollArea 中处理许多(数千个)自定义样式的小部件
- video-streaming - 如何从 m3u8 文件中提取 mp4 视频
- c# - 如果其中一列为空,则加入返回空
- python-3.x - 升级 tensorflow 后没有任何效果
- javascript - 原型方法和变量之间的区别,变量是javascript中的一种方法
- fonts - 如何正确缩放字体字形轮廓?
- django - 由于 http://testserver 前缀,Django assertRedirects 测试失败
- blueprism - Blueprism 中的动态列值
- python - 在python中将两个连续的行合并为一个具有相同键集的行