不能使用提示,因爲它在您瀏覽選項卡時不會刷新提示。因此,你需要重寫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