use*_*348 2 delphi hints delphi-10.3-rio
在 Delphi 10.3.3 Windows VCL 应用程序中,在组件的OnHint事件处理程序中TApplicationEvents,我在状态栏中显示当前提示:
procedure TForm1.ApplicationEvents1Hint(Sender: TObject);
begin
statMain.SimpleText := Application.Hint;
end;
Run Code Online (Sandbox Code Playgroud)
但是,我想添加一些包含特定运行时数据的特定文本,具体取决于哪个控件发送提示。
不幸的是,该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;
Run Code Online (Sandbox Code Playgroud)
在HintInfo提供各种有关提示,您可以自定义信息:
HintControl
正在对其进行提示处理的控件的名称。HintWindowClass
提示窗口控件的类。默认值为 THintWindow,但您可以指定从 THintWindow 派生的任何类。如果您想用自定义提示窗口替换 THintWindow,请使用此字段。HintPos
提示窗口左上角在屏幕坐标中的默认位置。通过更改此值来更改窗口出现的位置。HintMaxWidth
开始自动换行前提示窗口的最大宽度。默认情况下,该值是屏幕的宽度(全局 Screen 变量的 Width 属性)。HintColor
提示窗口的背景颜色。CursorRect
用户鼠标指针必须位于的矩形,提示窗口才会出现。CursorRect 的默认值是控件的客户端矩形。更改此值,以便将单个控件划分为多个提示区域。当用户将鼠标指针移到矩形外时,提示窗口消失。CursorPos
鼠标指针在控件内的位置。ReshowTimeout
提示系统在再次询问提示状态之前应等待多长时间。默认情况下,该字段为零,表示提示状态不会改变。将其设置为非零值将导致提示在经过请求的毫秒数后起作用,就好像用户将鼠标移到提示矩形外然后又移回。这可用于将提示处理推迟一段时间时间,或允许定期更新提示。HideTimeout
显示提示的毫秒数。默认情况下,它设置为 Application 变量的 HintHidePause 属性的值。HintStr
要在提示窗口中显示的字符串。这允许 OnHint 事件处理程序在显示之前修改提示的内容。默认情况下,它包含在传递 Application 变量的 Hint 属性值时由 GetShortHint 函数返回的值。HintData
要传递给提示窗口控件的附加数据。将此字段与 HintWindowClass 结合使用。
此外,仅供参考,您不需要使用TApplication(Event).OnHint事件只是显示TApplication.Hint文本TStatusBar。如果将 StatusBar 的AutoHint属性设置为 true,则 StatusBar 可以TApplication.Hint自动显示更新。您只需要确保您没有OnHint分配处理程序,否则AutoHint将无法工作(OnShowHint不过很好)。