版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、VCL中Drag功能的底層實(shí)現(xiàn)前段時(shí)間在論壇里看了一篇關(guān)于剖析VCL結(jié)構(gòu)的文件,其中不少高手的開懷暢談讓小輩們心里感覺非常的痛快!看完余又覺得不能光看,也該將自己的心得拿出來與大家分享,于是就邊夜翻看VCL源碼,終于將VCL如何實(shí)現(xiàn)Drag功能的過程弄個(gè)“基本明白”,其中可能會(huì)有不當(dāng)之處,再加上小弟的文學(xué)水平也只是初中畢業(yè),有些地方也許會(huì)表達(dá)不當(dāng),但其意思也基本上八九不離十了,故也請(qǐng)大家開懷暢言、批評(píng)指正,都是為了進(jìn)步嘛!哈哈……雖然D
2、ragDock操作與Drag操作是密切相關(guān),并且很大一部分操作是相同的,但本文暫且不討論與DragDock有關(guān)的部分,留待下回分解或也給大家表現(xiàn)表現(xiàn)………………一、與Drag操作相關(guān)的屬性、事件、函數(shù)VCL的Drag功能是在TControl類中現(xiàn)的,因此所有從TControl類派生出來的控件類者繼承了這些屬性、事件和函數(shù),包括:屬性:DragCurs:Drag時(shí)的鼠標(biāo)類型:(TCurs)DragKind:Drag的類型:(dkDragd
3、kDock)DragMode:Drag的方式:手動(dòng)(dmManual)或自動(dòng)(dmAutomatic)事件:OnStartDrag:Drag開始事件;OnDragOver:Drag經(jīng)過某個(gè)控件;OnDrag:Drag到某個(gè)控件并放開;OnEndDrag:Drag動(dòng)作結(jié)束;函數(shù):BeginDrag:開始控件的Drag動(dòng)作;Dragging:返回控件是否正被Dragging;CancelDrag:取消正在執(zhí)行的Drag操作;EndDrag:
4、結(jié)束正在執(zhí)行的Drag操作,與CancelDrag不同,EndDrag允許操作指定是否產(chǎn)生操作(由參數(shù)決定)。此外還有一些與Drag相關(guān)的函數(shù),在隨后的介紹中將逐一說明。二、Drag操作產(chǎn)生與執(zhí)行的過程1、自動(dòng)產(chǎn)生過程。我們知道在控件上單擊鼠標(biāo)左鍵時(shí)便會(huì)產(chǎn)生WM_LBUTTONDOWN消息,TControl類的WinProc消息處理方法捕捉到該消息時(shí),便判斷控件的DragMode是否為dmAutomatic,即是否自動(dòng)執(zhí)行Drag操作,
5、如果是則調(diào)用類保護(hù)函數(shù)BeginAutoDrag,立即進(jìn)入分析前請(qǐng)先留意在Controls單元中聲明的幾個(gè)全局變量:varDragControl:TControl被Drag的控件DragObject:TDragObject管理整個(gè)Drag過程的TDragObject對(duì)象DragInternalObject:BooleanTDragObject對(duì)象是否由內(nèi)部創(chuàng)建DragCapture:HWND管理Drag過程的Wnd實(shí)例句柄DragSta
6、rtPos:TPointDrag開始時(shí)的鼠標(biāo)位置DragSaveCurs:HCURSDrag開始的的鼠標(biāo)類型DragThreshold:IntegerDrag操作延遲位置ActiveDrag:TDragOperation正在執(zhí)行的Drag操作:(dopNonedopDragdopDock)DragImageList:TDragImageListDrag過程中代替鼠標(biāo)顯示的圖像列表BeginDrag的函數(shù)原型聲明為:procedureBe
7、ginDrag(Immediate:BooleanThreshold:Integer=1)參數(shù):Immediate:是否直接進(jìn)入Drag狀態(tài);Threshold:若Immediate參數(shù)為False,當(dāng)鼠標(biāo)移動(dòng)量超過Threshold給出的值時(shí)進(jìn)入Drag狀態(tài);且先看其實(shí)現(xiàn)代碼:procedureTControl.BeginDrag(Immediate:BooleanThreshold:Integer)varP:TPointbeginD
8、rag操作的對(duì)象不允許是窗體if(SelfisTCustomFm)(FDragKinddkDock)thenraiseEInvalidOperation.CreateRes(@SCannotDragFm)前面提過暫且不討論DragDock相關(guān)部分,所以對(duì)CalcDockSizes的函數(shù)調(diào)用不作分析。CalcDockSizesDragControl不為nil或Pointer($FFFFFFFF)說明已經(jīng)進(jìn)入了Drag狀態(tài)這里的判斷避免了遞
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于VCL激光器的多功能集成光芯片的研究.pdf
- WTB底層協(xié)議的研究與實(shí)現(xiàn).pdf
- “底層”是怎樣煉成的——論賈樟柯電影中的底層敘述.pdf
- 基于CTV100平臺(tái)的DPTV系統(tǒng)軟件和底層功能的設(shè)計(jì)與實(shí)現(xiàn).pdf
- TCN底層協(xié)議建模與實(shí)現(xiàn).pdf
- 手持RSU底層平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- vcl850立式加工中心
- 新紀(jì)錄運(yùn)動(dòng)中的底層表達(dá).pdf
- 基于Windows底層的Rootkit的研究及實(shí)現(xiàn).pdf
- 通用視頻解碼底層軟件的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 全開放PCNC硬件功能模塊的底層通訊開發(fā).pdf
- 基于VxWorks的單板底層軟件的設(shè)計(jì)與實(shí)現(xiàn).pdf
- GPON系統(tǒng)終端設(shè)備(ONT)的底層軟件實(shí)現(xiàn).pdf
- WebGIS體系架構(gòu)及底層服務(wù)的研究與實(shí)現(xiàn).pdf
- SDH中MSA功能的FPGA硬件實(shí)現(xiàn).pdf
- 寄生存儲(chǔ)機(jī)制及底層實(shí)現(xiàn)技術(shù).pdf
- 基于PCI總線NT底層開發(fā)技術(shù)實(shí)現(xiàn).pdf
- 原生XML數(shù)據(jù)庫底層服務(wù)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 證券交易底層通訊MOB平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 兩種方式實(shí)現(xiàn)ppt中實(shí)現(xiàn)圖片的拖動(dòng)功能
評(píng)論
0/150
提交評(píng)論