4

JvDocking ページ コントロールに多数のフォームをタブドッキングしていますが、タブが小さすぎてフォーム キャプション全体を表示できません。

タブにカーソルを合わせたときに、タブのテキストを含むヒントを表示する方法はありますか?

私が得た最も近いものは、各フォームのヒントです。

TJvDockVIDTabPageControl(Form).Pages[i].Hint := 'hint';

タブのパネル全体に 1 つのヒントがあります。

TJvDockVIDTabPageControl(Form).Panel.Hint := 'hint';
4

1 に答える 1

3

タブを移動してもヒントが更新されないように見えるため、ヒントを使用することはできません。したがって、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;
于 2013-11-28T16:41:02.870 に答える