2013-11-27 24 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;