首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi中的TTabSheet提示

Delphi中的TTabSheet提示
EN

Stack Overflow用户
提问于 2009-08-10 20:25:43
回答 4查看 3.6K关注 0票数 7

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

在Delphi 2009中有什么方法可以达到这个效果吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-10 23:15:42

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

代码语言:javascript
复制
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之前处理提示消息。)

代码语言:javascript
复制
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事件。

代码语言:javascript
复制
procedure TForm.PageMouseLeave(Sender: TObject);
begin
  PageControl.Hint := '';
  PageControl.ShowHint := false;
end;
票数 7
EN

Stack Overflow用户

发布于 2009-08-10 23:28:10

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

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

raize.com FAQ (Raize组件选项卡)更新(回应@Rigel的评论):

Raize组件发生了什么?

早在2015年,Embarcadero从我们手中收购了Raize组件,并将该产品重新命名为Konopka Signature VCL Controls (KSVC)。最初,他们单独销售该产品,但在过去的几个RAD Studio版本中,这些组件都可以通过GetIt包管理器免费获得。只需从GetIt或C++Builder工具菜单中打开Konopka包管理器,然后搜索“Konopka”即可找到安装程序。组件名称、单元和软件包与Raize组件中的相同,只是产品名称不同。

票数 6
EN

Stack Overflow用户

发布于 2009-08-10 20:42:39

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

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

代码语言:javascript
复制
procedure TForm1.PageControl1Change(Sender: TObject);
begin
  PageControl1.Hint := PageControl1.ActivePage.Hint;
end;

完成此操作后,提示将显示active选项卡。我不确定如何让它根据鼠标悬停的位置来改变提示--这是一个我以前从未注意到的有趣现象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1257014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档