我想要一个TPageControl和一些TTabSheets,当我依次将鼠标悬停在每个选项卡上时,可以看到“per tab some”工具提示提示。
在Delphi 2009中有什么方法可以达到这个效果吗?
发布于 2009-08-10 23:15:42
只需挂钩页面控件的鼠标移动事件,并使用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;发布于 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组件中的相同,只是产品名称不同。
发布于 2009-08-10 20:42:39
1-填写.Hint属性,并将PageControl的.ShowHint属性设置为True (假设每个选项卡表的ParentShowHint都设置为true;否则您必须单独设置每个页面)。
2-将此事件分配给PageControl的OnChange事件处理程序:
procedure TForm1.PageControl1Change(Sender: TObject);
begin
PageControl1.Hint := PageControl1.ActivePage.Hint;
end;完成此操作后,提示将显示active选项卡。我不确定如何让它根据鼠标悬停的位置来改变提示--这是一个我以前从未注意到的有趣现象。
https://stackoverflow.com/questions/1257014
复制相似问题