2013-11-27 21 views
4

我在JvDocking Page Control中有多个表单tabdocked,但标签太小而不能显示整个表单标题。JvDockTabPageControl:在提示标签mouseover上显示表单标题

无论如何要显示包含标签文本提示时悬停的提示?

我已经得到的最接近的是每个窗体上出现提示:

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

和标签的整个面板上的一个暗示:

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

@TLama是的,但那只会显示整个面板的一个提示。我的问题是得到不同的提示显示在容器内的不同标签上。 – user3042297

+0

我以为你忘了将ShowHint属性设置为True。但是我意识到你正在寻找如何为你的问题中列出的不同控件设置提示。对不起。 – TLama

回答

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并进行修改,或继承它提供自己的功能,再注入该类到您的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;