




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、鍵盤和鼠標編程 事件可分為用戶事件和系統事件兩類。用戶事件比較好理解,它用于響應應用程序的用戶的動作。單擊鼠標,就會調用一個OnMouseDown事件。移動鼠標,就會響應一個OnMouseMove事件。敲擊鍵盤,會響應一個OnKeyDown事件。系統事件是由操作系統產生的。典型的系統事件是定時器的OnTimer事件。不管事件以何種方式調用,Delphi總是先看事件處理器是否添加了代碼,如果有代碼,代碼將被執行,否則什么也不發生。 在事件驅動編程中,Delphi處理事件的順序非常重要。用戶僅僅只發出一個請求就可能觸發許多事件,因此弄清楚事件發生的順序非常重要。清楚了事件發生的順序后可以避免出現一
2、些竟想不到的結果。例如,單擊按鈕,首先響應的是OnEnter事件,然后響應OnMouseDown事件,最后觸發的是Onclick事件。 鍵盤事件處理 鍵盤事件 1OnKeyDown 當按下鍵盤上的任一個鍵,如字母鍵、數字鍵、功能鍵(F1F12)、Ctrl鍵、Shift鍵或Alt鍵等,都將產生一個OnKeyDown事件。 下面的一段代碼說明了OnKeyDown事件的用法:當打印的時候在窗體中按下Esc鍵后,取消打印作業。 procedureTForm1.FormKeyDown(Sender:TObject;varKey:Word;Shift:TShiftState); begin if(Key=
3、VK_ESCAPE)andPrinter.Printingthen begin Printer.Abort;/中止打印 M e s s a g e D l g ( 打 印 中 止 。,mtInformation,mbOK,0); End; End; 2OnKeyPress 當按下鍵盤上的一個字符鍵,如字母鍵、數字鍵等會產生一個OnKeyPress事件,但是單獨按下功能鍵(F1F12)、Ctrl鍵、Shift鍵或Alt鍵等,不會產生OnKeyPress事件。 下面的一段代碼說明了OnKeyPress事件的用法: procedureTForm1.FormKeyPress(Sender:TObjec
4、t;varKey:Char); begin /顯示按下的鍵 M e s s a g e D l g ( 你 按 下 了 + K e y + 鍵 。,mtInformation,mbOK,0); End; 3OnKeyUp 當按下鍵盤上的任一個鍵后松開時,都會產生一個OnKeyUp事件。對于功能鍵(F1F12)、Ctrl鍵、Shift鍵或Alt鍵等,也會產生一個OnKeyUp事件。 下面的一段代碼說明了OnKeyDown事件和OnKeyUp事件的用法:varFormColor:TColor;/用來保存窗體原來的顏色procedureTForm1.FormKeyDown(Sender:TObjec
5、t;varKey:Word;Shift:TShiftState);begin/當鍵按下時先保存窗體的顏色然后再改變窗體的顏色FormColor:=Form1.Color;Form1.Color:=clAqua;end;procedureTForm1.FormKeyUp(Sender:TObject;varKey:Word;Shift:TShiftState);begin/當鍵彈起時恢復窗體的顏色Form1.Color:=FormColor;end;程序運行后,在窗體中按下某個鍵然后松開,窗體的顏色會隨之改變。 模擬按下鍵盤上的某個鍵模擬按下鍵盤上的某個鍵 有時在一些應用程序中,也需要模擬在鍵盤
6、上按下某個鍵的過程,這可以通過向特定對象發送按鍵事件來實現。 例4-1 模擬按下鍵盤上的某個鍵(1)創建一個新的工程,在窗體中添加一個Edit組件、一個Button組件和一個定時器組件(位于System標簽頁)。(2)并添加Button組件的OnClick事件、Timer組件的OnTimer事件的處理過程如下:procedureTForm1.Button1Click(Sender:TObject);/模擬在Edit1組件中按下了字母a鍵beginPostMessage(Edit1.Handle,WM_KEYDOWN,65,0);end;procedureTForm1.Timer1Timer(S
7、ender:TObject);/模擬在窗體Form1中按下了Tab鍵beginPostMessage(Form1.Handle,WM_KEYDOWN,VK_TAB,0);end;(3)運行程序,可以看到窗體的輸入焦點在不斷地變化,盡管并沒有在鍵盤上按下Tab鍵。如果按下Button1按鈕,則Edit1組件中的字符串會自動增加一個字母a。 檢測功能鍵 在 組 件 的 O n K e y D o w n 、 O n K e y U p 、OnMouseDown和OnMouseUp等事件的處理過程中,有一個TShiftState類型的變量Shift,TShiftState類型定義如下: typeTS
8、hiftState=setof(ssShift,ssAlt,ssCtrl,ssLeft,ssRight,ssMiddle,ssDouble); 所以根據Shift的值就可以判斷當鍵盤上的鍵按下時Shift、Alt和Ctrl鍵的狀態,或者按下鼠標左鍵、中鍵時的狀態或者是否雙擊了按鍵。當然,如果有OnMouseDown事件發生了,而又不是按下左鍵和中鍵,則按下的一定是右鍵 例4-2 檢測Shift、Alt和Ctrl鍵是否按下。 procedureTForm1.FormKeyDown(Sender:TObject;varKey:Word; Shift:TShiftState); begin if S
9、hift=ssShiftthen caption:=你按下了Shift鍵; if Shift=ssAltthen caption:=你按下了Alt鍵; if Shift=ssCtrlthen caption:=你按下了Ctrl鍵; end; procedureTForm1.FormMouseDown(Sender:TObject;Button:TMouseButton; Shift:TShiftState;X,Y:Integer); begin if Shift=ssLeftthen caption:=你單擊鼠標左鍵; if Shift=ssMiddlethen caption:=你單擊鼠標中
10、鍵; if Shift=ssDoublethen caption:=你雙擊了鼠標; if ssRightinShiftthen caption:=你單擊鼠標右鍵; end; 鼠標事件處理 常用鼠標事件 1OnMouseDown 當 按 下 鼠 標 上 的 任 一 個 鍵 , 會 產 生 一 個OnMouseDown事件。 2OnMouseMove 當 鼠 標 的 位 置 發 生 了 改 變 后 會 產 生 一 個OnMouseMove事件。 3OnMouseUp 當鼠標的某個按鍵按下,然后松開后會產生一個OnMouseUp事件。 拖放編程 常用的拖放事件有: 1OnDragDrop 在拖曳事件
11、開始時會產生一個OnDragDrop事件。 2OnDragOver 當 拖 曳 對 象 跨 過 一 個 組 件 時 會 產 生 一 個OnDragOver事件。 3OnEndDrag 當拖曳事件結束后會產生一個OnEndDrag事件。具體過程如下:(1) 拖曳操作開始大多數的組件具有DragMode屬性,表示開始拖曳操作的方式。DragMode屬性的缺省值為dmManual,也就是要在被拖動組件的OnMouseDown事件的處理過程中調用BeginDrag過程才開始拖曳操作。如果將DragMode屬性設置為dmAutomation,則鼠標左鍵在被拖動組件上按下后就自動開始拖曳操作。(2) 接受
12、拖曳操作當拖動一個組件經過第二個組件的時候,第二個組件會產生一個OnDragOver事件。在該事件的處理過程中有一個布爾類型的參數,該參數的設置直接影響是否產生OnDragDrop事件。一般情況下,在OnDragOver事件的處理過程中,根據參數Source判斷拖曳操作的源。如果是可以接受的源,則將Accept參數設置為True;否則,將其設置為False。(3) 處理拖曳操作在第二個組件的OnDragDrop事件的處理過程中,根據拖曳操作的源做一些相應的處理。(4) 拖曳操作結束拖曳操作完成后釋放鼠標左鍵,會在第一個組件中產生一個OnEndDrag事件,可以根據參數Target的數值進行相應
13、的處理。如果參數Target的值為nil,則表示拖曳操作沒有被接受;如果Target的值不為nil,則Target的值就是接受拖曳操作的組件。 例4-3 該例程說明了拖動操作的實現過程。程序運行結果界面如圖4-1所示,上面有一個Edit組件,下面是一個Memo組件。程序運行后,可以在Edit組件中輸入一些文字,然后將鼠標移動到Edit組件上并按下左鍵,拖動到Memo組件并松開左鍵,則Edit組件中的文字就被添加到Memo組件中了。 (3)選中Edit組件并在對象編輯器中為其添加OnMouseDown事件的處理過程如下: procedureTForm1.Edit1MouseDown(Sender
14、:TObject;Button:TMouseButton; Shift:TShiftState;X,Y:Integer); begin ifButton=mbLeftthen /開始進行拖動操作 (SenderAsTEdit).BeginDrag(False); end; 注意:過程BeginDrag具有一個布爾類型的參數,如果該參數設置為False,表示當按下鼠標左鍵并拖動一小段距離后才進行拖曳操作;如果設置為True,表示當按下鼠標左鍵后立即進行拖曳操作。通常將該參數設置為False。 (4)選中Memo組件并在對象編輯器中為其添加OnDragOver事件和OnDragDrop事件的處理 過程如下: procedureTForm1.Memo1DragOver(Sender,Source:TObject;X,Y:Integer; State:TDragState;varAccept:Boolean); begin ifSourceIsTEditthen Accept:=True;/可以接受拖動操作 end; procedureTForm1.Memo1DragDrop(Sende
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外派海員勞務派遣服務合同
- 采石場礦山安全生產標準化建設承包協議
- 茶葉品牌連鎖加盟與區域市場拓展合同
- 制程關鍵工序管理制度
- 前期手續辦理管理制度
- 辦公租賃銷售管理制度
- 2025至2030中國休閑體育用品行業發展趨勢分析與未來投資戰略咨詢研究報告
- 高考總復習語文課件第四部分寫作學案四掌握議論文的4種結尾方法
- 廣東石油化工學院《口腔頜面外科學實訓二》2023-2024學年第二學期期末試卷
- 高二數學人教A版必修5課件第3章不等式342
- 危重患者氣道濕化的管理
- 中建室外管網專項施工方案
- 工業大數據采集處理與應用
- 股權投資框架合同明確投資條件
- 抗美援朝資料
- LNG加氣站運營過程中的常見風險及案例分析
- 電纜附件培訓資料
- 2024秋季國開《憲法學》形考作業1-4答案
- 新入職員工安全培訓試題及參考答案【達標題】
- 《RT-Thread實時操作系統內核、驅動和應用開發技術》全套教學課件
- 舌癌放療護理
評論
0/150
提交評論