您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > C++Builder入门6
1第六章擷取輸入裝置的訊息和事件鍵盤、滑鼠,是我們最常使用的輸入工具。我們是不是常常希望可以再按下某個按鈕後就可以有哪些功能出現呢?沒錯,這就是這一章節的重點,在第四章,我們提到了有關鍵盤、滑鼠、以及RS-232介面的事件及訊息偵測,讓我們更能掌控電腦週邊的硬體。2大綱•6-1.偵測鍵盤訊息•6-2.偵測滑鼠訊息•6-3.使用滑鼠拖放視窗•6-4.RS-232的I/O通訊•本章習題36-1.偵測鍵盤訊息•在很多情況下,我們會需要讓程式知道我們按下了哪些按鈕,有一些BCB的事件就是用在按鍵偵測上。–例如OnKeyDown、OnKeyUp、OnKeyPress等,當你按下了按鈕時,OnKeyDown和OnKeyPress這兩個事件會被執行,當放開按鈕時,OnKeyUp將被執行。所以我們在BCB上想要偵測到鍵盤的訊息相當的容易,不需要像在DOS時代一樣的麻煩。•在這一小節,我們利用打磚塊這樣的小程式為背景來解釋偵測鍵盤訊息的做法。–範例6-1~6-346-1.偵測鍵盤訊息•範例6-1:偵測鍵盤訊息void__fastcallTForm1::FormKeyDown(TObject*Sender,WORD&Key,TShiftStateShift){if(Key==37)if(Shape1-Left0)Shape1-Left--;if(Key==38)if(Shape1-Top0)Shape1-Top--;if(Key==39)if((Shape1-Left+Shape1-Width)Form1-ClientWidth)Shape1-Left++;if(Key==40)if((Shape1-Top+Shape1-Height)Form1-ClientHeight)Shape1-Top++;}56-1.偵測鍵盤訊息•範例6-2:偵測鍵盤Key值void__fastcallTForm1::FormKeyDown(TObject*Sender,WORD&Key,TShiftStateShift){Label4-Caption=(int)Key;}void__fastcallTForm1::FormKeyPress(TObject*Sender,char&Key){Label3-Caption=(int)Key;}66-2.偵測滑鼠訊息•偵測滑鼠的訊息跟偵測鍵盤的訊息其實原理上大同小異,也是利用BCB所提供的事件去偵測。•在這邊我們可以使用OnMouseMove這個事件來偵測目前的滑鼠動作,若是要偵測有沒有按下滑鼠的按鈕或是有沒有滾動滾輪,則可以使用以下這些事件:事件說明OnClick按一下滑鼠左鍵馬上放開所啟動的事件OnDblClick按兩下滑鼠左鍵馬上放開所啟動的事件OnMouseDown按下滑鼠的按鍵所啟動的事件OnMouseMove滑鼠移動所啟動的事件OnMouseUp放開滑鼠按鍵所啟動的事件OnMouseWheel轉動滑鼠滾輪所啟動的事件OnMouseWheelDown向下轉動滑鼠滾輪所啟動的事件OnMouseWheelUp向上轉動滑鼠滾輪所啟動的事件76-2.偵測滑鼠訊息•範例6-4:偵測滑鼠訊息void__fastcallTForm1::FormMouseMove(TObject*Sender,TShiftStateShift,intX,intY){LabeledEdit1-Text=X;//將滑鼠的X座標顯示出來LabeledEdit2-Text=Y;//將滑鼠的Y座標顯示出來}void__fastcallTForm1::FormMouseWheelDown(TObject*Sender,TShiftStateShift,TPoint&MousePos,bool&Handled){Label3-Caption=剛剛滑鼠滾輪向下轉;}//---------------------------------------------------------------------------void__fastcallTForm1::FormMouseWheelUp(TObject*Sender,TShiftStateShift,TPoint&MousePos,bool&Handled){Label3-Caption=剛剛滑鼠滾輪向上轉;}86-2.偵測滑鼠訊息•範例6-4:偵測滑鼠訊息void__fastcallTForm1::FormClick(TObject*Sender){Label2-Visible=false;Label3-Caption=剛剛您按了滑鼠一下;}//---------------------------------------------------------------------------void__fastcallTForm1::FormDblClick(TObject*Sender){Label2-Visible=false;Label3-Caption=剛剛您你按了滑鼠兩下;}//---------------------------------------------------------------------------void__fastcallTForm1::FormMouseDown(TObject*Sender,TMouseButtonButton,TShiftStateShift,intX,intY){Label2-Visible=false;if(Button==mbRight)Label3-Caption=剛剛您你按了滑鼠右鍵;elseif(Button==mbLeft)Label3-Caption=剛剛您你按了滑鼠左鍵;elseLabel3-Caption=剛剛您你按了滑鼠中鍵;}//---------------------------------------------------------------------------void__fastcallTForm1::FormMouseUp(TObject*Sender,TMouseButtonButton,TShiftStateShift,intX,intY){Label2-Visible=true;}96-2.偵測滑鼠訊息•範例6-4–執行結果106-2.偵測滑鼠訊息•範例6-5:改用滑鼠控制的範例6-1–既然我們現在已經學會了該如何偵測滑鼠的動作,相信各位一定會讓範例6-1中的棒子用滑鼠來控制!–所以,我們將在範例程式6-5中加入滑鼠控制的部分,讓範例6-5除了可以利用方向鍵來控制那根棍子外,還可以使用滑鼠來控制。–程式設計成滾動滑鼠的滾輪可以控制棍子的上下移動,左鍵和右鍵可以控制棍子的左右移動。116-2.偵測滑鼠訊息•範例6-5:主要程式碼void__fastcallTForm1::FormMouseDown(TObject*Sender,TMouseButtonButton,TShiftStateShift,intX,intY){if(Button==mbRight){if((Shape1-Left+Shape1-Width)Form1-ClientWidth)Shape1-Left++;}elseif(Button==mbLeft)if(Shape1-Left0)Shape1-Left--;}//---------------------------------------------------------------------------void__fastcallTForm1::FormMouseWheelDown(TObject*Sender,TShiftStateShift,TPoint&MousePos,bool&Handled){if((Shape1-Top+Shape1-Height)Form1-ClientHeight)Shape1-Top++;}//---------------------------------------------------------------------------void__fastcallTForm1::FormMouseWheelUp(TObject*Sender,TShiftStateShift,TPoint&MousePos,bool&Handled){if(Shape1-Top0)Shape1-Top--;}126-3.使用滑鼠拖放視窗•在視窗環境中使用滑鼠,也常常見到一種功能,那就是『拉』。–什麼叫做用『拉』的呢?一般我們分成兩種動作:•第一種是Drag-and-Dock方式呈現的視窗模式•第二種是Drag-and-Drop的應用。136-3.使用滑鼠拖放視窗•Drag-and-Dock–Drag-and-Dock就是像Word上方的快速按鈕或是主選單等,可以將一整個相同功能的『群組物件』一起獨立出來變成一個視窗,也可以依附在上一層的視窗中,這樣的功能就叫做Dock。如果各位還記得,我們在第四章的時候也曾經實作過Dock的功能。–在一般的Windows中有關Drag-and-Dock的屬性有底下這三種屬性功能DockSite要能提供讓其他元件Dock的元件(基座)DragKind選擇是要提供Drag或是Dock的功能DragMode選擇手動模式或是自動模式146-3.使用滑鼠拖放視窗•Drag-and-Drop–Drag&Drop就是我們在複製檔案的時候,可以將檔案用『拉』的拉到另一個目錄去﹔或是在桌面上我們想要移動Icon的位置,我們也可以直接用『拉』的﹔或是我們在用CuteFTP或是WS-FTP時,也可以將遠端的檔案用『拉』的拉到我們的電腦上等等。以上這些動作就是我們這邊所謂的『拉』,就是Drag&Drop。–在一般的Windows中有關Drag-and-Drop的事件有以下這四種事件功能OnDragDrop如果DragKind是Drag時,當有一個正在Dragging的元件Drop在這個元件上會啟動的事件OnDragOver如果DragKind是Drag時,當有一個元件被Drag到一個元件上的時候會發生的事件OnEndDrag如果DragKind是Drag時,結束Draging時會啟動的事件。OnStartDrag如果DragKind是Drag時,開始Draging時會啟動的事件。156-3.使用滑鼠拖放視窗•範例6-8:Drag-and-Drop實作範例–在範例6-8的實做過程中,首先我們先在畫面上放上三個Image元件,並且將這三個Image元件的AutoSize設定成True。做好圖片的放置之後,我們必須實做Form上面『OnDragDrop』和『OnDragOver』這兩個事件才能做到Drag&Drop的效果(因為我們要Drag的東西是在Form上面被Drop)。–最後還有一個最重要的設定,那就是想要被『Drag』的物件上有些屬性必須要被設定。•DragKind:『dkDrag』•DragMode:『dmAutomatic』166-3.使用滑鼠拖放視窗•範例6-8:Drag-and-Drop實作範例(程式碼)void__fastcallTForm1::FormDragDrop(TObject*Sender,TObject*Source,intX,intY){TImage*buf=(TImage*)Source;//將被拉的元件強制轉換成TImagebuf-Left=X;//設定該元件新的位置buf-Top=Y;//設定該元件新的位置}//---------------------------------------------------------------------------void__fastcallTForm1::FormDragOver(TObject*Sender,TObject*Sour
本文标题:C++Builder入门6
链接地址:https://www.777doc.com/doc-3391285 .html