C++Builder入门6
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在这一小节,我们利用打砖块这样的小程式为背景来解释侦 测键盘讯息的做法.
– 范例6-1 ~ 6-3
3
6-1.侦测键盘讯息
范例6-1:侦测键盘讯息
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (Key == 37) if (Shape1->Left > 0) Shape1->Left--; if (Key == 38) if (Shape1->Top > 0) 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++; }
5
6-2.侦测滑鼠讯息
侦测滑鼠的讯息跟侦测键盘的讯息其实原理上大同小异,也 是利用BCB所提供的事件去侦测. 在这边我们可以使用OnMouseMove这个事件来侦测目前的 滑鼠动作,若是要侦测有没有按下滑鼠的按钮或是有没有滚 动滚轮,则可以使用以下这些事件:
事件 OnClick OnDblClick OnMouseDown OnMouseMove OnMouseUp OnMouseWheel OnMouseWheelDown OnMouseWheelUp 说明 按一下滑鼠左键马上放开所启动的事件 按两下滑鼠左键马上放开所启动的事件 按下滑鼠的按键所启动的事件 滑鼠移动所启动的事件 放开滑鼠按键所启动的事件 转动滑鼠滚轮所启动的事件 向下转动滑鼠滚轮所启动的事件 向上转动滑鼠滚轮所启动的事件
6-2.侦测滑鼠讯息
范例6-4:侦测滑鼠讯息
void __fastcall TForm1::FormClick(TObject *Sender) { Label2->Visible = false; Label3->Caption = "刚刚您按了滑鼠一下"; } //--------------------------------------------------------------------------void __fastcall TForm1::FormDblClick(TObject *Sender) { Label2->Visible = false; Label3->Caption = "刚刚您你按了滑鼠两下"; } //--------------------------------------------------------------------------void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Label2->Visible = false; if (Button == mbRight) Label3->Caption = "刚刚您你按了滑鼠右键"; else if (Button == mbLeft) Label3->Caption = "刚刚您你按了滑鼠左键"; else Label3->Caption = "刚刚您你按了滑鼠中键"; } //--------------------------------------------------------------------------void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Label2->Visible = true; 8 }
10
6-2.侦测滑鼠讯息
范例6-5:主要程式码
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (Button == mbRight) { if ((Shape1->Left + Shape1->Width) < Form1->ClientWidth) Shape1->Left++; } else if (Button == mbLeft) if (Shape1->Left > 0) Shape1->Left--; } //--------------------------------------------------------------------------void __fastcall TForm1::FormMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled) { if ((Shape1->Top + Shape1->Height) < Form1->ClientHeight) Shape1->Top++; } //--------------------------------------------------------------------------void __fastcall TForm1::FormMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled) { if (Shape1->Top > 0) Shape1->Top--; 11 }
6-2.侦测滑鼠讯息
范例6-4
– 执行结果
9
6-2.侦测滑鼠讯息
范例6-5:改用滑鼠控制的范例6-1
– 既然我们现在已经学会了该如何侦测滑鼠的动作,相信各位一定会让 范例6-1中的棒子用滑鼠来控制! – 所以,我们将在范例程式6-5中加入滑鼠控制的部分,让范例6-5除了 可以利用方向键来控制那根棍子外,还可以使用滑鼠来控制. – 程式设计成滚动滑鼠的滚轮可以控制棍子的上下移动,左键和右键可 以控制棍子的左右移动.
事件 OnDragDrop OnDragOver OnEndDrag OnStartDrag 功能 如果DragKind是Drag时,当有一个正在Dragging的元件 Drop在这个元件上会启动的事件 如果DragKind是Drag时,当有一个元件被Drag到一个元件 上的时候会发生的事件 如果DragKind是Drag时,结束Draging时会启动的事件. 如果DragKind是Drag时,开始Draging时会启动的事件.
6-3.使用滑鼠拖放视窗
在视窗环境中使用滑鼠,也常常见到一种功能,那就是 『拉』.
– 什麼叫做用『拉』的呢?一般我们分成两种动作: 第一种是Drag-and-Dock方式呈现的视窗模式 第二种是Drag-and-Drop的应用.
12
6-3.使用滑鼠拖放视窗
Drag-and-Dock
– Drag-and-Dock就是像Word上方的快速按钮或是主选单等,可以将一 整个相同功能的『群组物件』一起独立出来变成一个视窗,也可以依 附在上一层的视窗中,这样的功能就叫做Dock.如果各位还记得,我 们在第四章的时候也曾经实作过Dock的功能. – 在一般的Windows中有关Drag-and-Dock的属性有底下这三种
4
6-1.侦测键盘讯息
范例6-2:侦测键盘Key值
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { Label4->Caption = (int)Key; } void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key) { Label3->Caption = (int)Key; }
14
6-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』
第六章 撷取输入装置的讯息和事件
键盘,滑鼠,是我们最常使用的输入工具.我们是不是 常常希望可以再按下某个按钮后就可以有哪些功能出现 呢?没错,这就是这一章节的重点,在第四章,我们提 到了有关键盘,滑鼠,以及RS-232介面的事件及讯息侦 测,让我们更能掌控电脑周边的硬体.
1
大纲
6-1. 侦测键盘讯息 6-2. 侦测滑鼠讯息 6-3. 使用滑鼠拖放视窗 6-4. RS-232的I/O通讯 本章习题
属性 DockSite DragKind DragMode 功能 要能提供让其他元件Dock的元件(基座) 选择是要提供Drag或是Dock的功能 选择手动模式或是自动模式
13
6
– Drag & Drop就是我们在复制档案的时候,可以将档案用『拉』的拉 到另一个目录去;或是在桌面上我们想要移动Icon的位置,我们也可 以直接用『拉』的;或是我们在用CuteFTP或是WS-FTP时,也可以 将远端的档案用『拉』的拉到我们的电脑上等等.以上这些动作就是 我们这边所谓的『拉』,就是Drag & Drop. – 在一般的Windows中有关Drag-and-Drop的事件有以下这四种
6
6-2.侦测滑鼠讯息
范例6-4:侦测滑鼠讯息
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { LabeledEdit1->Text = X; //将滑鼠的 X 座标显示出来 LabeledEdit2->Text = Y; //将滑鼠的 Y 座标显示出来 } void __fastcall TForm1::FormMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled) { Label3->Caption = "刚刚滑鼠滚轮向下转"; } //--------------------------------------------------------------------------void __fastcall TForm1::FormMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled) { Label3->Caption = "刚刚滑鼠滚轮向上转"; } 7
2
6-1.侦测键盘讯息
在很多情况下,我们会需要让程式知道我们按下了哪些按钮, 有一些BCB的事件就是用在按键侦测上.
– 例如OnKeyDown,OnKeyUp,OnKeyPress等,当你按下了按钮时, OnKeyDown和OnKeyPress这两个事件会被执行,当放开按钮时, OnKeyUp将被执行.所以我们在BCB上想要侦测到键盘的讯息相当的 容易,不需要像在DOS时代一样的麻烦.