Presentation is loading. Please wait.

Presentation is loading. Please wait.

第十二章 事件 12-1 KeyPress 12-2 KeyDown及KeyUp

Similar presentations


Presentation on theme: "第十二章 事件 12-1 KeyPress 12-2 KeyDown及KeyUp"— Presentation transcript:

1 第十二章 事件 12-1 KeyPress 12-2 KeyDown及KeyUp
第十二章 事件 12-1 KeyPress 12-2 KeyDown及KeyUp 12-3 MouseDown、MouseUp及 MouseMove 12-4 DragOver與DragDrop

2 在本章之前,本書常用的事件為滑鼠的Click事件及表單的Active及Create事件,
本章的重點則是集中介紹一些鍵盤的 KeyPress、KeyDown及KeyUp事件、滑鼠的MouseDown、MouseUp、MouseMove、DragOver(拖曳且越過)及DragDrop(拖曳且放置)等常用事件,學習本章之後,將有助於提昇電玩控制、影像繪圖等軟體的靈活度。

3 12-1 KeyPress 當使用者按一下鍵盤的一般字元、倒退鍵及Enter鍵等具有ASCII碼的鍵時,都會產生KeyPress事件,電腦並傳回按鍵的字元。KeyPress的語法如下: procedure TForm1.來源物件 KeyPress(Sender: TObject; var Key: Char); 以上語法說明如下: Key 傳回使用者所按的字元。

4 範例12-1a 示範KeyPress事件的用法。

5 12-2 KeyDown及KeyUp 上一節的KeyPress僅能傳回一般字元、倒退鍵及Enter鍵,對於一些功能鍵、移位鍵及按鍵的同時是否按下 、 及 鍵則沒有反應。若要偵測以上特殊鍵功能,或深入研究到底是鍵盤被按下去、或彈上來的特殊時點,則可使用本節的KeyDown及KeyUp,KeyDown與KeyUp的語法完全相同,如下所示: //KeyDown procedure TForm1.來源物件KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); //TShiftState 是集合型態 //KeyUp procedure TForm1.來源物件KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); 以上語法說明如下: Key 鍵盤各鍵的Unicode。

6 傳回按鍵的同時是否也按Shift 、Ctrl 或 Alt鍵,Shift值如下表,其型態是集合。
以下範例可印出使用者所按鍵盤的Unicode、Shift參數及回應使用者按鍵的同時是否按下 Shift 、 Ctrl 及 Alt 鍵。 Shift值 按下之鍵 ssShift Shift鍵 ssCtrl Ctrl鍵 ssAlt Alt鍵

7 範例12-2a 示範KeyDown事件。

8 範例12-2b 請設計一個踩影子遊戲,遊戲規則如下:
使用者用鍵盤的上、下、左、右 鍵及加速鍵操控螢幕的鐵錘,錘打依亂數自由移動的笑臉圖案,當鐵錘打到笑臉時印出使用者按鍵次數及使用時間。 程式說明: 本例使用表單的KeyDown事件,表單的KeyDown較為特殊,其使用前提是表單不得含有任何具有KeyDown事件的元件,例如Edit、Button及Memo等元件。

9 範例12-2c 同上範例,但採用炮彈發射型,笑臉左右移動、鐵錘向上發射,並可由使用者加速、減速、向左及向右移動。

10 12-3 MouseDown、MouseUp及MouseMove
滑鼠的最常用事件為Click與DblClick,若要進一步得知是滑鼠的何鍵被按、按鍵的滑鼠指標座標及按鍵的同時是否也按鍵盤的 、及 ,則應使用本節的MouseDown、MouseUp或MouseMove。其中MouseDown是任意滑鼠鍵被按均產生此事件,MouseUp則是產生於滑鼠任意鍵被按下去且彈上來時,MouseMove則只要使用者將滑鼠移過某物件上方時,該物件即產生MouseMove事件,以上三事件語法如下: //MouseDown procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //TShiftState 是集合型態 //MouseUp procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //MouseMove procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

11 並非所有物件的MouseDown與MouseUp皆有Button參數,只有少
以上語法說明如下: 1. Button參數 並非所有物件的MouseDown與MouseUp皆有Button參數,只有少 數的物件有此參數,例如Form與Image。此參數可傳回滑鼠的那 一鍵被按,其型態是TMouseButton的列舉型態,傳回值如下表。 2. Shift參數 Shift是一種集合型態,傳回滑鼠被按下或放開時鍵盤 、 或 鍵被按的情形,但有些物件沒有Button參數,故此參數亦傳回滑鼠的何鍵被按一下或放開,Shift參數值如下表: 3. X,Y 傳回滑鼠按鍵被按、或放開的座標位置 Button的值 被按下或放開之滑鼠鍵 mbLeft 左鍵 mbRight 右鍵 mbMiddle 中間鍵 Shift的值 按鍵情形 ssShift 鍵盤 Shift 被按 ssCtrl 鍵盤 Ctrl 被按 ssAlt 鍵盤 Alt 被按 ssLeft 滑鼠左鍵被按 ssMiddle 滑鼠中間鍵被按 ssRight 滑鼠右鍵被按

12 範例12-3b 請設計一個簡易繪圖程式,其功能如下: 1. 使用滑鼠當作畫筆。 2. 滑鼠按鍵的左右鍵分別代表紅色與綠色
3. 鍵盤的 Shift 、 Ctrl 及 Alt 分別代表筆寬為1、2及4

13 12-4 DragOver與DragDrop DragOver是將某物件拖曳至另一物件上方的事件,DragDrop是將某物件拖曳至另一物件上方並放下的事件,兩者都牽涉兩個物件的互動,其語法如下: //DragDrop procedure TForm1.目的物件DragDrop(Sender, Source: TObject; X, Y: Integer); //DragOver procedure TForm1.目的物件DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); 以上語法說明如下: 1. 目的物件 目的物件可為表單或任意元件。 2. Source 其型態為物件,代表拖曳的來源物件,請看範例說明。

14 傳回來源物件進入或離開目的物件,型態為TDragState的列舉型態,其值如下表:
4.X,Y 傳回滑鼠於目的物件的座標。 DragOver與DragDrop的產生有兩種模式,其一是手動模式(dm Manual),另一是自動模式(dmAutomatic),使用方式是由DragMode屬性設定,預設值為dmManual。手動模式必須由程式設計者使用Drag方法拖曳,本書暫不予介紹。本書僅介紹自動模式,當程式設計者將DragMode設為dmAutomatic時,使用者即可拖曳物件。其次,拖曳的過程若要顯示被拖曳的物件,則應使用DragOver事件顯示其過程。最後,放下時所要處理的事則交由DragDrop事件處理,請看以下範例。 State值 意義 dsDragLeave 離開 dsDragMove 進入

15 範例12-4a 示範DragOver的用法。

16 範例12-4b 請寫一個兒童語文測驗程式,題目要求如下: 1.由使用者拖曳圖片至相對的文字上方放下
2.當圖片接近文字時,文字出現“Hello”問候語 3.當圖片離開文字時,文字出現“Bye”問候語 4.若圖片與文字相符,則圖片消失,否則電腦發出Beep聲,使用者可繼續尋找對應的文字。 程式說明: if(Source=img.Chip) 本例表單上有兩個物件可被拖曳,當目的物件 (表單)有來源物件DragOver時,應使用Source判斷來源物件為何。本例使用if敘述判斷來源物件,程式較好理解但較冗長,下一範例可改善此缺點。

17 範例12-4c 請設計一個3×3的智慧方塊,使用者可將依亂數排列的小方塊重新排列。 程式說明:
(Source as TEdit).Left:=x ; 上例使用if敘述判斷Source的來源,但來源物件多時,程式就顯得冗長,本例採用上式直接設定來源物件的屬性,才能簡化程式的撰寫。

18 範例12-4d 同上範例,但是幫使用者尋找最佳的落點,就如同Windows的接龍遊戲,使用者只要將紙牌丟在目的地附近,電腦會幫使用者尋找恰當的落點。 程式說明: 1. 本例定義每一物件的左上角座標如下: 2.當拖曳物件時,滑鼠當時的座標(X,Y)即與以上9個位置比較,何者距離最短,則是該物件的落點,並將該物件移至正確的位置。 (65,65) (130,65) (195,65) (65,130) (130,130) (195,130) (65,185) (130,195) (195,195)

19 習題 同範例12-4d,但應預防使用者跨方塊拖曳方塊,也就是只能拖曳方塊至緊臨的空白位置,而不能跨過方塊。


Download ppt "第十二章 事件 12-1 KeyPress 12-2 KeyDown及KeyUp"

Similar presentations


Ads by Google