タブを移動してもヒントが更新されないように見えるため、ヒントを使用することはできません。したがって、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 をフォークして変更を加えるか、サブクラス化して独自の機能を提供し、そのクラスをドックスタイルに注入することができます。方法の大まかな例を次に示します。
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 スタイルでも機能します。VID を VSNet に置き換え、TJvDockTabPanel の代わりに TJvDockVSNetTabPanel から継承するだけです。
アップデート
現在、これを行う JVCL トランクの更新があります。コンポーネントを更新し、ドック スタイルの ShowTabHints プロパティを true に設定します。または、コードで実行します。
MyDockStyle.ShowTabHints := True;