TTabSheet在Delphi中提示

Rod*_*ddy 7 delphi tooltip ttabsheet

我想要一个TPageControl和一些TTabSheets,当我依次悬停在每个标签上时,"每个标签页"工具提示提示可见.

有没有办法在Delphi 2009中获得这种效果?

小智 7

只需挂钩页面控件的鼠标移动事件,并使用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;
Run Code Online (Sandbox Code Playgroud)

当鼠标直接从一个选项卡移动到另一个选项卡时,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;
Run Code Online (Sandbox Code Playgroud)

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

procedure TForm.PageMouseLeave(Sender: TObject);
begin
  PageControl.Hint := '';
  PageControl.ShowHint := false;
end;
Run Code Online (Sandbox Code Playgroud)


Arg*_*tyr 6

Raize Components中,可以通过将trzpagecontrol.tabhints属性设置为来完成true.好的组件可以节省你很多时间(因此钱).

(只是一个快乐的客户,顺便说一句)

  • +1 - 对Raize组件的投资非常值得.支持是世界级的,视觉样式选项可以使用标准控件将您的应用程序与其他应用程序区分开来. (2认同)