我在 JvDocking 页面控件中添加了多个表单,但这些选项卡太小而无法显示整个表单标题。

无论如何在徘徊时显示包含标签文本的提示?

我得到的最接近的是每个表格的提示:

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

以及整个选项卡面板上的一个提示:
TJvDockVIDTabPageControl(Form).Panel.Hint := 'hint';

最佳答案

您不能使用 Hint,因为在您浏览选项卡时它似乎不会刷新提示。因此,您需要覆盖 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 并进行更改,或者将其子类化以提供您自己的功能,然后将该类注入(inject)到您的码头样式中。这是一个粗略的例子:
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 出现的任何地方,并从 TJvDockVSNetTabPanel 继承而不是 TJvDockTabPanel

更新

现在 JVCL 主干中有一个更新可以做到这一点。更新您的组件并将停靠栏样式上的 ShowTabHints 属性设置为 true。或者用代码来做。
MyDockStyle.ShowTabHints := True;

10-05 22:27