TTabSheet在Delphi中提示

时间:2009-08-10 20:25:43

标签: delphi tooltip ttabsheet

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

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

5 个答案:

答案 0 :(得分:6)

只需挂钩页面控件的鼠标移动事件,然后使用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;

答案 1 :(得分:5)

Raize Components中,可以通过将trzpagecontrol.tabhints属性设置为true来实现。好的组件可以为您节省大量时间(因此也是金钱)。

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

答案 2 :(得分:1)

1 - 填写.Hint属性,并为PageControl将.ShowHint属性设置为True(假设每个标签页都将ParentShowHint设置为true;否则您必须单独设置每个页面。)

2 - 将此事件分配给PageControl的OnChange事件处理程序:

procedure TForm1.PageControl1Change(Sender: TObject);
begin
  PageControl1.Hint := PageControl1.ActivePage.Hint;
end;

执行此操作后,提示将为活动标签。我不知道如何根据鼠标悬停的位置改变提示 - 这是一个我以前从未注意过的有趣现象,实际上。

答案 3 :(得分:1)

在tPageControl.OnMouseMove上通过Pgctrl.IndexOfTabAt(X,Y)找到TabIndex并将TabSheet提示分配给tPageControl提示

看这里:

http://www.delphigroups.info/2/9/321680.html

答案 4 :(得分:0)

最初正在开发一个C ++ Builder 6(!)项目(所以请原谅这个成绩单中的任何拼写错误),我从answer of Gerard [1] 开始,并尽可能减少代码尽可能。为了更好地控制Application.CancelHint的调用,我引入了成员FLastHintTabIndex,必须用-1初始化。

procedure TForm1.PageControl1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  TabIndex: Integer;
begin
  TabIndex := PageControl1.IndexOfTabAt(X, Y);
  if FLastHintTabIndex <> TabIndex then
      Application.CancelHint;
  if TabIndex <> -1 then
      PageControl1.Hint = PageControl1.Pages[TabIndex].Hint;
  FLastHintTabIndex := TabIndex;
end;

[1] 我的回答并不含有太多新内容,但我发现all that code and text过于分散注意力。