gpt4 book ai didi

delphi - Delphi中的TTabSheet提示

转载 作者:行者123 更新时间:2023-12-03 14:50:46 26 4
gpt4 key购买 nike

我想要一个 TPageControl 和一些 TTabSheets,当我依次将鼠标悬停在每个选项卡上时,可以看到“每个选项卡”工具提示提示。

有什么方法可以在Delphi 2009中获得这种效果吗?

最佳答案

只需 Hook 页面控件的鼠标移动事件并使用 TabAtPos 属性即可确定鼠标悬停在哪个选项卡上。然后将该选项卡的提示分配给页面控件的提示属性。

procedure TForm.PageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
var
tabindex: integer;
begin
tabindex := PageControl.IndexOfTabAt(X, Y);
if (tabindex >= 0) and (PageControl.Hint <> PageControl.Pages[tabindex].Hint) then
begin
Application.CancelHint;
PageControl.Hint := PageControl.Pages[tabindex].Hint;
PageControl.ShowHint := true;
end;
end;

当鼠标直接从一个选项卡移动到另一个选项卡时,CancelHint/ShowHint 将负责更新提示窗口。

下面的改进但丑陋的版本还会在鼠标直接从一个选项卡移动到另一个选项卡时暂时将 HintPause 更改为 0,以便立即重新显示提示。 (解决方案的“丑陋”部分涉及 Application.ProcessMessages 调用,该调用强制在恢复 HintPause 之前处理提示消息。)

procedure TForm.PagesMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
var
hintPause: integer;
tabindex: integer;
begin
tabindex := PageControl.IndexOfTabAt(X, Y);
if (tabindex >= 0) and (PageControl.Hint <> PageControl.Pages[tabindex].Hint) then
begin
hintPause := Application.HintPause;
try
if PageControl.Hint <> '' then
Application.HintPause := 0;
Application.CancelHint;
PageControl.Hint := PageControl.Pages[tabindex].Hint;
PageControl.ShowHint := true;
Application.ProcessMessages; // force hint to appear
finally Application.HintPause := hintPause; end;
end;
end;

要隐藏主页主体上的提示,请将以下方法分配给页面控件的 OnMouseLeave 事件。

procedure TForm.PageMouseLeave(Sender: TObject);
begin
PageControl.Hint := '';
PageControl.ShowHint := false;
end;

关于delphi - Delphi中的TTabSheet提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1257014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com