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風格了。

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屬性可以用來通路父停靠控件;
例如下面的代碼示範:
停靠控件依靠Visible屬性來設定是否顯示。當調用控件的Close方法也會隐藏控件,但要記住,需要将docking manager的doFreeOnClose選項禁用,否則,Close方法會銷毀控件;另外一個隐藏控件的方法是使用UnDock。調用Free也是銷毀控件。
l 不必手工建立容器控件,因為他們是伴随停靠操作自動建立和銷毀的;
l 如果一個控件隐藏,容器還會為它保留位置,當再次顯示時,還會出現在同樣的位置;
l 如果開啟自動隐藏特性,再設定Visible屬性為False會無效;是以在隐藏這類控件前,最好先取消自動隐藏特性;
停靠控件提供一些事件來響應這些操作:VisibleChanged, VisibleChaning, OnClose, OnCloseQuery;
l 顯示和隐藏停靠控件的示例
l 動态建立停靠控件