国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Delphi > 正文

Delphi中停靠技術(shù)的實(shí)現(xiàn)

2024-07-16 17:58:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Delphi中停靠技術(shù)的實(shí)現(xiàn):

隨著軟件技術(shù)的不斷進(jìn)步,軟件界面也越來(lái)越美觀,操作也越來(lái)越方便。

綜觀市面上比較專業(yè)的各種軟件,我們會(huì)發(fā)現(xiàn)大部分都提供窗體停靠的功能,特別象工具軟件,基本上都或多或少有停靠功能。

自然,Delphi也支持停靠,而且她和VCL緊密結(jié)合,對(duì)于廣大的Delphi程序員來(lái)說(shuō)更是一大福音。讓我們省去枯燥的編碼時(shí)間。把注意力集中在核心程序的構(gòu)思上。

先讓我們來(lái)復(fù)習(xí)一下VCL的結(jié)構(gòu),在TWinControl類中有一個(gè)DockSite屬性(boolean),它的作用是是否允許別的控件停靠在它的上面,在TControl類中有一個(gè)DragKind屬性,如果要這個(gè)控件能停靠在別的控件上,就把DragKind屬性設(shè)成dkDock。就這么簡(jiǎn)單,只要設(shè)置一下屬性,一個(gè)支持停靠的程序就完成了。

當(dāng)然,上面說(shuō)的只是最最基本的步驟,有了以上兩步,我們就可以繼續(xù)編寫(xiě)代碼實(shí)現(xiàn)更復(fù)雜的功能。

一般的支持停靠的程序都可以在主窗口的上下左右停靠,也就是說(shuō)在主窗口的邊上放上能被停靠的控件比較好(只要是從TWinControl繼承的都行),一般我們都選擇TPanel,為了便于讀者理解,我們可以假定主窗口的左邊可以停靠,所以在主窗口上放一個(gè)Align屬性為alLeft的Panel,取名為L(zhǎng)eftDockPanel,寬度為0,DockSite屬性為T(mén)rue,當(dāng)然我們的LeftDockPanel應(yīng)該是可以改變大小的,所以在它右邊再放一個(gè)TSplitter,取名為L(zhǎng)eftSplitter,Align屬性為alLeft。接下來(lái)就是停靠控件了,一般的程序停靠控件都是窗體,所以我們也建一個(gè)窗體,取名叫DockableForm,DragKind屬性設(shè)成dkDock,DragMode屬性設(shè)為dmAutomatic(自動(dòng)停靠)。

現(xiàn)在我們可以運(yùn)行這個(gè)程序了,什么?效果不好?停靠的窗體停靠停靠進(jìn)去后就不見(jiàn)了!

哦,我差點(diǎn)忘了,當(dāng)停靠窗體停靠時(shí)Delphi會(huì)產(chǎn)生一些事件,他們分別是

1.OnDockOver(Sender: TObject; Source: TDragDockObject;

X, Y: Integer; State: TDragState; var Accept: Boolean);

2.OnDockDrop(Sender: TObject; Source: TDragDockObject;

X, Y: Integer);

3.OnGetSiteInfo(Sender: TObject; DockClient: TControl;

var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);

4.OnStartDock(Sender: TObject;

var DragObject: TDragDockObject);

5.OnEndDock(Sender, Target: TObject; X, Y: Integer);

6.OnUnDock(Sender: TObject; Client: TControl;

NewTarget: TWinControl; var Allow: Boolean);

哇,這么多,別急,讓我細(xì)細(xì)道來(lái):

先讓我們來(lái)看看第一個(gè)事件

OnDockOver是在停靠控件(DockableForm)掠過(guò)被停靠控件(LeftDockPanel)時(shí)觸發(fā)的。Source包含了停靠—拖動(dòng)操作的信息,其中有一個(gè)重要的屬性是Control,就是DockableForm,另一個(gè)重要的屬性是DockRect,就是停靠的位置;X,Y是鼠標(biāo)的位置,State的狀態(tài)有dsDragEnter, dsDragLeave, dsDragMove,分別表示拖動(dòng)進(jìn)入,拖動(dòng)離開(kāi),拖動(dòng)移動(dòng);Accept是是否同意停靠的意思。OnDockOver事件主要作用是控制停靠窗體的預(yù)覽位置,下面我們來(lái)加入以下代碼:

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 太仆寺旗| 迁安市| 远安县| 铜梁县| 和硕县| 长汀县| 伊金霍洛旗| 恩平市| 同德县| 措美县| 柳河县| 呈贡县| 基隆市| 铜川市| 志丹县| 云南省| 定结县| 临泉县| 崇礼县| 昂仁县| 大足县| 永定县| 格尔木市| 五峰| 满洲里市| 鄂托克旗| 乌兰县| 南平市| 长沙县| 遵义市| 九江县| 谷城县| 宣武区| 安康市| 滨海县| 南城县| 阿克陶县| 正镶白旗| 阿坝县| 开封县| 库尔勒市|