不能使用提示,因为它在您浏览选项卡时不会刷新提示。因此,你需要重写TJvDockTabPanel.MouseMove()和做这样的事情:
inherited MouseMove(Shift, X, Y)
Index := GetPageIndexFromMousePost(X, Y)
// Your code here
if (Index > -1) then
begin
// Strip hotkey '&' out.
Hint := StringReplace(Page.Pages[Index].Caption, '&', '', [rfReplaceAll]);
Application.ActivateHint(ClientToScreen(Point(X, Y)));
end;
您可以叉JvDockVIDStyle.pas并进行修改,或继承它提供自己的功能,再注入该类到您的dockstyle 。这里有一个如何一个粗略的例子:
unit JvDockExtVIDStyle;
interface
uses JvDockVIDStyle, Classes;
type
TJvDockExtTabPanel = class(TJvDockTabPanel)
protected
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
end;
TJvDockExtVIDTabPageControl = class(TJvDockVIDTabPageControl)
public
constructor Create(AOwner: TComponent); override;
end;
implementation
uses Forms, SysUtils;
{ TJvDockExtVIDTabPageControl }
constructor TJvDockExtVIDTabPageControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
//Override TabPanel with our subclassed version
TabPanelClass := TJvDockExtTabPanel;
end;
{ TJvDockExtTabPanel}
procedure TJvDockExtTabPanel.MouseMove(Shift: TShiftState; X, Y: Integer);
var
Index : Integer;
begin
inherited MouseMove(Shift, X, Y);
Index := GetPageIndexFromMousePos(X, Y);
if (Index > -1) then
begin
Hint := StringReplace(Page.Pages[Index].Caption, '&', '', [rfReplaceAll]);
Application.ActivateHint(ClientToScreen(Point(X, Y)));
end;
end;
然后你就可以在你的主要形式,实现它通过覆盖在您的船坞风格TabDockClass使用我们的子类的一个创造。像这样:
DockStyle.TabDockClass := TJvDockExtVIDTabPageControl;
DockServer.DockStyle := DockStyle;
这也适用于VSNET风格。只是VSNET VID替换所有出现的继承TJvDockVSNetTabPanel代替TJvDockTabPanel
更新
现在有在JVCL主干这将做到这一点的更新。更新您的组件,并将Dock模式中的ShowTabHints属性设置为true。或者在代码中完成。
MyDockStyle.ShowTabHints := True;
@TLama是的,但那只会显示整个面板的一个提示。我的问题是得到不同的提示显示在容器内的不同标签上。 – user3042297
我以为你忘了将ShowHint属性设置为True。但是我意识到你正在寻找如何为你的问题中列出的不同控件设置提示。对不起。 – TLama