天天看點

轉:ExpressBars中的停靠控件使用

1          新手上路

Dock panels

  Dock panels是建立停靠應用的最主要部分,是在應用内部的windows局部視窗,可以放置其他的VCL控件。當一個Dock panels放在Form上後,它會自動漂浮在Form之上。如果需要停靠到窗體中,需要使用TdxDockSite控件,并且可以設定主題風格。

  注意,當要對Dock panels控件進行删除、複制粘貼或者其他一些操作時,務必使用控件的上下文菜單來實作。

  Dock panels之間可以互相停靠,停靠的結果有2種類型-tab containers 和side containers,例如,可以将side containers放到一個tab containers中。

Dock Sites

  Dock Sites支援放置Dock panels,注意Dock Sites隻能接受Dock panels控件;

  如果沒有Dock Sites上沒有控件時,會有一個空白的矩形區域占位,如果不想這樣,可以采用以下技巧:

l       用一個Dock Sites填充整個Form,然後在上面放上一個Dock panels;

l       如果将DockSites的autoSize屬性設為true,它的大小會自适用所接受的Dock Panel或者container;

Docking Manager

  Docking Manager控件可以集中控制所有或者部分的停靠控件。注意,它不是必須的,如果在Application的任何窗體上都沒有放置Docking Manager,docking controller會接管停靠控件的管理。但是docking controller隻提供預設設定,不允許改變停靠控件的設定。一般情況下都會使用Docking Manager。

ExpressDocking提供4種預先設定好顯示風格,标準(類似于Delphi)、Visual Studio .Net、office和Windows Xp風格。為了在設計時就能指定風格,需要使用Docking Manager的ViewStyle和LookAndFeel屬性。注意LookAndFeel屬性設定隻能在ViewStyle屬性設定為vsUseLookAndFeel時使用。

要指定一個dock panel的caption,使用Caption屬性,設定圖示使用ImageIndex屬性,當然之前要給docking manager提供一個imageList。

  如果要改變dock panel的位置,但是不想在經過dock site上方的時候自動嵌入,可以在拖動的時候按住CTRL。

  停靠控件的AllowDockClients屬性為接受的控件停靠設定位置,AllowDock為停靠到其他控件設定位置。設定AllowFloating為False,可以禁止停靠控件漂浮,Dockable設定為False,則不允許拖動停靠。

l       建立一個應用;

l       在窗體上放置一個TdxDockSite控件,并設定Align屬性為alClient;

l       在TdxDockSite上放置一個TdxDockPanel控件,TdxDockPanel會自動充滿整個TdxDockSite的區域。設定ShowCaption屬性為False,隐藏面闆标題欄;

l       在TdxDockPanel上放置一個memo控件,并設定Align為alClient;

l       設定dock panel的AllowDockClients屬性,将所有的選項為False,阻止其他dock panel的停靠;

l       将dock site的AllowDockClients屬性的dtTop選項設為False,将會阻止其他dock panel停靠到其上方;

l       至此,所有準備步驟已經就緒。現在可以在窗體上建立一些dock panel,這些dock panel隻能被拖放到窗體的邊緣,除了上方。當一個dock panel停靠到窗體的左邊,設定AutoHide屬性,将會自動加入一個side container控件;

l       剩下的事情就要切入主題了,放置一個docking manager控件,設定ViewStyle屬性為vsNET,整個應用的界面就會變成VS .NET風格了。

轉:ExpressBars中的停靠控件使用

2          運作時的停靠控件

  Dock panel 隻能在dock site上該能改變大小。ExpressDocking提供2種停靠點類型:dock sites、layout sites和float sites。Dock sites 是放置在窗體上,用來接受dock panel的停靠;Layout sites是當有停靠操作時,自動建立在dock site上,以提供更靈活的布局定制;Float sites是漂浮dock panel的載體;

  當dock panel處于漂浮狀态,會自動建立Float sites,一旦dock panel停靠,Float site就會被銷毀;

  Layout sites 也是自動建立的,在dock panel停靠後發生。Layout site不會占據空間;

  Dock panel 提供DockTo, MakeFloating和UnDock方法來執行停靠操作。

  MakeFloating是使dock panel離開Dock site而處于漂浮狀态;

  UnDock類似于MakFloating,但是會隐藏Dock panel。這個方法很有用處,例如當一個dock panel停靠到另外一個dock panel形成side container,你需要知道目标dock panel是不是在一個tab container中,如果之前所有的dock panel都被UnDock了,那麼你就不必擔心擔心了。

  例如将dock panel停靠到左邊:

dxDockPanel1.DockTo(dxDockSite1, dtLeft, 0);

  例如将一個dock panel充滿窗體的下方,另外一個dock panel放置未充滿區域的右側:

dxDockPanel2.DockTo(dxDockSite1, dtBottom, 0); //此步會自動建立一個LayoutDockSite來放置dxDockPanel2;

dxDockPanel3.DockTo(dxDockPanel2.LayoutDockSite, dtRight, 0); //在dxDockPanel2的LayoutDockSite上來布局新dock panel;

docking manager提供一些方法來存儲和加載布局,這些方法是SaveLayoutToIntFile, SaveLayoutToRegistry, SaveLayoutToStream, LoadLayoutFromIntFile,LoadLayoutFromRegistry, LoadLayoutFromStream

l       調用停靠控件的DockTo方法就會自動一個建立容器;當UnDock發生後,會自動銷毀容器空間;

l       調用停靠控件的MakeFloating方法會自動銷毀容器控件;

l       調用容器的ActiveChildIndex來查找目前活動dock panel;

l       Dock Panel有個DockIndex屬性,決定了其在容器中的索引;

l       容器有Children,ChildCount, ValidChildren和ValidChildCount屬性,可以用來通路容器的成員dock panel;

l       Dock panel的ParentDockControl, TabContainer和SideContainer屬性可以用來通路父停靠控件;

  例如下面的代碼示範:

轉:ExpressBars中的停靠控件使用

  停靠控件依靠Visible屬性來設定是否顯示。當調用控件的Close方法也會隐藏控件,但要記住,需要将docking manager的doFreeOnClose選項禁用,否則,Close方法會銷毀控件;另外一個隐藏控件的方法是使用UnDock。調用Free也是銷毀控件。

l       不必手工建立容器控件,因為他們是伴随停靠操作自動建立和銷毀的;

l       如果一個控件隐藏,容器還會為它保留位置,當再次顯示時,還會出現在同樣的位置;

l       如果開啟自動隐藏特性,再設定Visible屬性為False會無效;是以在隐藏這類控件前,最好先取消自動隐藏特性;

停靠控件提供一些事件來響應這些操作:VisibleChanged, VisibleChaning, OnClose, OnCloseQuery;

l       顯示和隐藏停靠控件的示例

  

l       動态建立停靠控件