在查看代碼時(shí),對(duì)docksite這個(gè)屬性很好奇,百度搜了很久,發(fā)現(xiàn)了一個(gè)很好玩的東西。關(guān)于如何制作類似工具欄的東東,可以把它拖出來(lái)作為浮動(dòng)工具條。還有可以把它拖到窗體的左邊,形成豎條工具條。 大體的內(nèi)容如下: 在Delphi中只要是從TWinControl繼承的控件都支持被???如上面的LeftDockPanel),也就是有DockSite這個(gè)屬性;所有從TControl繼承的控件都支持???如上面的DockableForm),也就是有DragKind這個(gè)屬性.所以支持被??康目丶贾С滞??,支持停靠的控件不一定支持被??浚览砗芎?jiǎn)單,因?yàn)門WinControl繼承于TControl。 基本的步驟: 假定主窗口左邊可以停靠,在主窗口上放一個(gè)Align屬性為alLeft的Panel(可用其他能被??康目丶?,取名為L(zhǎng)eftDockPanel,寬度為0,DockSite屬性為True。在它右邊再放一個(gè)TSplitter,取名為L(zhǎng)eftSplitter,Align屬性為alLeft。建一個(gè)窗體,取名叫DockableForm,DragKind屬性設(shè)成dkDock,DragMode屬性設(shè)為dmAutomatic(自動(dòng)???。 上面操作完成之后,并不能達(dá)到想要的效果,??康拇绑w停靠進(jìn)去后就不見(jiàn)了。這與其觸發(fā)的事件有關(guān)系,分別為: OnDockOver事件是控制??看绑w的預(yù)覽位置;OnDockDrap事件是控制停靠窗體的最終位置;OnGetSiteInfo是詢問(wèn)是否可以停靠;OnStartDock是停靠開(kāi)始,OnEndDock是??拷Y(jié)尾,OnUnDock是不???也就是被拖出來(lái)時(shí))。
OnDockDrop是在停靠窗體進(jìn)入被??靠丶r(shí)發(fā)生的,作用是控制停靠窗體的最終位置。參數(shù)和OnDockOver差不多。在該方法中添加如下代碼: 添加了以上代碼之后,當(dāng)我們把??看绑w關(guān)閉時(shí),會(huì)發(fā)現(xiàn)裝載DockableForm的LeftDockPanel不能還原,此時(shí),可以在DockableForm的OnClose事件中,把LeftDockPanel的寬度設(shè)為0。在OnClose事件中添加如下代碼: ??看绑w設(shè)置完成。。同理可以在主窗體的其他位置都實(shí)現(xiàn)這個(gè)功能。 OnGetSiteInfo是在窗體移動(dòng)時(shí)觸發(fā)的,所以經(jīng)常觸發(fā),它里面的DockClient就是TDockableForm。有一個(gè)引用參數(shù)叫CanDock,和OnDockOver中的Accept差不多,都是詢問(wèn)是否允許???。在這里可以不寫,CanDock默認(rèn)就是True,也可以寫上CanDock := DockClient is TDockableForm; OnStartDock,OnEndDock,OnUnDock這三個(gè)事件都是在DockableForm上面有用,意思分別是??块_(kāi)始,??拷Y(jié)尾,不???。OnStartDock和OnEndDock經(jīng)常會(huì)被觸發(fā),OnUnDock只在停靠窗體變成浮動(dòng)時(shí)觸發(fā)。
|
|