Delphi编程_ 键盘和鼠标事件处理_第1页
Delphi编程_ 键盘和鼠标事件处理_第2页
Delphi编程_ 键盘和鼠标事件处理_第3页
Delphi编程_ 键盘和鼠标事件处理_第4页
Delphi编程_ 键盘和鼠标事件处理_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、键盘和鼠标事件处理 6.1 焦点 什么是焦点? 焦点是接收用户鼠标或键盘输入的能力 对象具有焦点时,可接收用户的输入 只有具有焦点的应用程序才有活动标题栏,才能接受输入 有关说明 对象得到产生 OnEnter 对象失去焦点产生 OnExit 事件 有些对象,它是否具有焦点是可以看出来的 当按钮具有焦点时,标题周围的边框将突出显示 只有当对象的 Enabled 和 Visible 属性为 True 时,控件才能接收焦点 将焦点赋给对象的方法 运行时选择对象 运行时用快捷键选择对象 在代码中用 SetFocus 方法 6.2 TAB键顺序 按下 TAB 或 SHIFT+TAB 后,焦点从一控件移动

2、到另一控 件的顺序。 TAB键顺序与建立控件的顺序相同 TabOrder属性可改变一个控件的TAB件顺序,且从0开始 不能获得焦点的控件,无效的和不可见的控件,不包含在 TAB键顺序中 按 TAB 键时,这些控件将被跳过 TabStop 属性已置为 False 的控件,只不过在按 TAB键时这 个控件被跳过,但保持它在实际 Tab 键顺序中的位置。 一个 RadioGroup 组只有一个 TAB位置 6.3 键盘事件 窗体和接受键盘输入的控件都识别以下三种事件 OnKeyPress 按下对应某 ASCII 字符的键 OnKeyDown 按下键盘的任意键 OnKeyUp 释放键盘的任意键 只有获

3、得焦点的对象才能够接受键盘事件 如果将窗体上的 KeyPreview 属性设置为 True,则对每个控件在控 件识别其所有键盘事件之前,窗体就会接受这些键盘事件。 键盘事件彼此并不相互排斥。 按下一键时将生成OnKeyDown 和 OnKeyPress 事件,而松开此键 后生成 OnKeyUp 事件。 当用户按下一个OnKeyPress 不能检测的键时将触发 OnKeyDown 事件,而松开此键后时生成 OnKeyUp 事件。 6.3.1 OnKeyPress事件 产生 按下某个键时触发该事件,F1、F2、Ctrl等系统按键不会产生事件 说明 OnKeyPress事件产生一个Key参数(一个字

4、符Char),它对应于对应 于ASCII字符代码 在事件过程中修改key值可过滤按键 示例 如大小写转换 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin key:=chr(ord(UpCase(key); end; 6.3.1 OnKeyPress事件(续) 忽略非数字键的通用过程 Function IgnoreNonNumeric(Key:Char):Char; begin if not(key in 0.9) then result:=#0 else result:=key; end; proced

5、ure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin Key:=IgnoreNonNumeric(Key); end; 6.3.2 OnKeyDown、OnKeyUp事件 提供了最低级的键盘响应 检测 OnKeyPress 事件无法检测到的情况 SHIFT、CTRL 和 ALT 键的特殊组合 不仅响应按键操作而且响应释放键的操作(OnKeyPress 只响应按键操作) 大写与小写返回同一值 说明 某些控件(命令按钮、选项按钮和复选框)不接受箭头键事件,按下箭头键后 将使焦点移动到另一个控件 不触发 OnKeyDown和O

6、nKeyUp事件: 命令按钮、选项按钮和复选框具有焦点时按下箭头键 窗体上有Default、Cancel按钮时,按下Enter或ESC 窗体上存在有效TabStop=True的控件时,按下Tab键 按下为菜单定义的快捷键 6.4 鼠标事件 基本鼠标事件 OnMouseDown OnMouseUp OnMouseMove 鼠标滚动事件 OnMouseWheel OnMouseWheelDown OnMouseWheelUp 鼠标拖放 6.4 鼠标事件(续) 说明 单击一个控件除了产生 OnClick 事件以外还可产生 OnMouseDown 和 OnMouseUp 事件 OnClick和OnDb

7、lClick只有鼠标左键才会触发 OnDbClick事件在OnClick事件之后被触发 思考:什么情况下,DbClick 事件永远不会被触发? OnMouseDown 按下任意鼠标按钮时发生 OnMouseUp 释放任意鼠标按钮时发生 OnMouseMove 每当鼠标指针移动到屏幕新位置时发生 6.4 鼠标事件(续) button的值 mbLeft mbRight mbMiddle Shift值 ssShift:按下Shift ssAlt:按下Alt ssCtrl:按下 Ctrl ssLeft:按下鼠标左键 ssRight:按下鼠标右键 ssMiddle:按下鼠标中键 ssDouble:鼠标左

8、右键同时按下 X,Y值 鼠标在控件客户区的位置 6.4.1 基本鼠标事件的使用 var PaintNow:Boolean; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PaintNow:= True; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

9、begin PaintNow:= False; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin self.Canvas.pen.Create.Color:=clRed; self.Canvas.Pen.Width:=5; If PaintNow=true Then self.Canvas.LineTo(X, Y); /画一个线 end; 6.4.2 鼠标滚动事件 OnMouseWheel 转动鼠标滚轮时,触发该事件 OnMouseWheelDown 鼠标

10、向下转动时,该事件发生 OnMouseWheelUp 鼠标向上转动时,该事件发生 6.4.3 鼠标拖放 实现拖动的步骤 开始拖动操作 控件的DragMode属性设置为面dmAutomatic可自动开始 设为dmManul,则使用BeginDrag方法开始拖动 接受拖动操作 用户拖动对象经过某控件时,该控件产生OnDragOver事件 接受Accept:=True 释放拖动操作 在OnDragDrop事件中添加代码,响应接受,释放拖动 结束拖动操作 不管接受与否,释放拖动均会产生OnEndDrag事件 用拖动对象定制拖放 可用TDragObject的派生对象来进一步定制拖动操作 6.5 模拟按键

11、 方法 PostMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall 例:在StringGrid控件中模拟按下键 PostMessage(StringGrid1.Handle,WM_KEYDO WN,Vk_Down,0) 虚拟按键值 虚拟键按下键虚拟键按下键 VK_LEFTVK_PRIORPage Up VK_UPVK_NEXTPage Down VK_RIGHTVK_ENDEnd key VK_DOWNVK_HOMEHome key VK_BACKBackspaceVK_PRINTPrint key VK_TABTab VK_INSERTInsert key

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论