2013-02-04 44 views
0

是否有方法可以在TJvDockVSPopupPanel已設置後更改其選項卡圖標?德爾福:更改TJvDockTabHostForm的選項卡圖標

的問題是,我想通過我的程序發生改變後的選項卡圖標更改爲驗證圖像...

ImageList1: TImageList; 

procedure TValidationWindow.UpdateIcon; 
var 
    i, topValidationError : integer; 
begin 
    topValidationError := 3; 

    { 
     SECTION 
     //Set topValidationError value to the specific error that has occurred 
     SECTION END 
    } 

    // Set the Icon to the specific image. 
    ImageList1.GetIcon(topValidationError, Self.Icon); 
end; 

以上將只在第一時間!有任何想法嗎?

編輯:

在進一步的檢查,我發現有一個FImages:TCustomImageList在TJvDockCustomTabControl,但是我還沒有找到一種方法來訪問FImages然而,我假設必須有某種方式來增加我的圖標到這個列表,然後使用imageindex更改選項卡圖標圖像。

解決:

因此,最大的問題是訪問圖像列表,這可以通過允許TJVDockTabControl訪問TJvDockVIDTabPageControl來完成。

改變標籤圖標的代碼是...

if (GetAncestors(Self, 3) is TJvDockTabHostForm) then 
    if ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl is TJvDockVIDTabPageControl) then 
    begin 
     if FTabSheetIndex = - 1 then 
      FTabSheetIndex := ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).PageSheets.IndexOf(TJvDockTabSheet(Self.Parent)); 
     ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Pages[FTabSheetIndex].ImageIndex := x// The icon you want to use 
     ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Panel.Refresh; 
    end; 

我已經包括FTabSheetIndex因爲更改DockHostWindow會導致選項卡例如,改變在更改之前刪除選項卡會導致選項卡索引順序發生更改,因此可以輕鬆將其設置爲-1並再次找到。

信息上GetAncestors()可以在這裏找到How can you tell if a TJvDockServer Form is unpinned or pinned?

您也將有你的圖標添加到TJvDockTabPageControl,在FormShow事件做最好...

if (GetAncestors(Self, 3) is TJvDockTabHostForm) then 
    if ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl is TJvDockVIDTabPageControl) then 
    begin 
     FTabImageListCount := ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Images.Count; 
     for i := 0 to ImageList1.Count - 1 do 
     begin 
      ImageList1.GetIcon(i,Icon); 
      ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Images.AddIcon(icon); 
     end; 
    end; 

但是,如果表單沒有顯示在你的應用程序的開始,圖標更改功能可能無法正常工作,直到你特意點擊標籤來顯示它。因此,只要您的表單添加到TJvDockHostForm中,最好添加圖標......這仍然是我正在研究的內容,但是關鍵問題已得到解決。

+0

'FImages:TCustomImageList'聽起來像是通過'Images'屬性暴露的東西。控件是否有一對'Images'和'ImageIndex'屬性?這將是標準的,如果是的話,使用這些。 –

+0

不幸的是,在那個班上,我已經找到了一個解決方案,今天上午,我會張貼一次,我已經把比特:) –

回答

0

所以最大的問題是訪問圖像列表,這可以通過允許訪問TJVDockTabControl的TJvDockVIDTabPageControl完成。

改變標籤圖標的代碼是...

if (GetAncestors(Self, 3) is TJvDockTabHostForm) then 
    if ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl is TJvDockVIDTabPageControl) then 
    begin 
     if FTabSheetIndex = - 1 then 
      FTabSheetIndex := ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).PageSheets.IndexOf(TJvDockTabSheet(Self.Parent)); 
     ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Pages[FTabSheetIndex].ImageIndex := x// The icon you want to use 
     ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Panel.Refresh; 
    end; 

我已經包括FTabSheetIndex因爲更改DockHostWindow會導致選項卡例如,改變在更改之前刪除選項卡會導致選項卡索引順序發生更改,因此可以輕鬆將其設置爲-1並再次找到。

信息上GetAncestors()可以在這裏找到How can you tell if a TJvDockServer Form is unpinned or pinned?

您也將有你的圖標添加到TJvDockTabPageControl,在FormShow事件做最好...

if (GetAncestors(Self, 3) is TJvDockTabHostForm) then 
    if ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl is TJvDockVIDTabPageControl) then 
    begin 
     FTabImageListCount := ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Images.Count; 
     for i := 0 to ImageList1.Count - 1 do 
     begin 
      ImageList1.GetIcon(i,Icon); 
      ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Images.AddIcon(icon); 
     end; 
    end; 

但是,如果表單沒有顯示在你的應用程序的開始,圖標更改功能可能無法正常工作,直到你特意點擊標籤來顯示它。因此,只要您的表單添加到TJvDockHostForm中,最好添加圖標......這仍然是我正在研究的內容,但是關鍵問題已得到解決。