2.鼠标编程2.1鼠标的常用事件OnClick
单击鼠标左键时触发该事件。
OnMouseDown
当单击鼠标任一键时触发该事件。
OnMouseMove
当单击鼠标在对象上移动时触发该事件。
OnMouseUp
当鼠标的任一键按下后松开时触发该事件。
示例:检测窗口上的鼠标动作,不同的鼠标动作在窗口的 Memo 组件中输出动作的名称。界面如下:
代码如下:
procedure TForm1.FormClick(Sender: TObject);begin Memo1.Lines.Add('Click');end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin Memo1.Lines.Add('Down');end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin Memo1.Lines.Add('Move');end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin Memo1.Lines.Add('Up');end;2.2鼠标拖放事件OnDrogDrop
鼠标拖拽开始时触发该事件
OnDrogOver
鼠标推拽对象经过组件时触发该事件
OnEndDrag
鼠标拖拽结束后触发该事件
鼠标拖拽事件开发步骤:
1.开始拖拽
一般组件对于拖拽事件的属性:
DragMode
拖拽操作方式,取值为:
dmManual - 手动,必须在被拖拽组件的OnMouseDown事件中调用 BeginDrag() 过程才可以开始拖拽操作dmAutomation - 自动,当鼠标左键在组件上按下后自动可以开始拖拽操作
2.接受拖拽
当鼠标拖拽一个组件经过另一个组件时,另一个组件会触发 OnDrogOver 事件,参数:
Accept
该参数表示当前组件(也就是上面的另一个组件)是否接受拖拽,设置为:
True,表示接受拖拽,则该组件会产生 OnDragDrop 事件False,不接受拖拽
3.处理拖拽
在另一个组件触发的OnDragDrop 事件中,处理拖拽操作。参数:
Source
表示拖拽操作的源,也就是按下鼠标开始拖拽的组件。
4.拖拽结束
拖拽操作完成后,会在第一个组件中触发 OnEndDrag 事件,参数:
Target
表示拖拽操作的目标组件,如果为 nil,表示没有组件接受拖拽操作,不为 nil,表示 Target 组件接受了拖拽操作。
示例:将窗体中的 Label 组件拖拽到 Memo 上,界面如下图:
示例代码:
procedure TForm1.LabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin // 鼠标在 Label 上按下时 , 所有 Label 的 OnMouseDown 事件 if (Button = mbLeft) and (Sender is TLabel) then (Sender as TLabel).BeginDrag(false);end;procedure TForm1.Memo1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);begin // 拖拽到 Memo 组件上时 if Source is TLabel then Accept := true;end;procedure TForm1.Memo1DragDrop(Sender, Source: TObject; X, Y: Integer);begin // 处理拖拽 if Source is TLabel then (Sender as TMemo).Lines.Add((Source as TLabel).Caption);end;procedure TForm1.LabelEndDrag(Sender, Target: TObject; X, Y: Integer);begin // 在 Label 上拖拽结束时, 与 在 Memo 上拖拽处理 选择其中一个来实现即可 // 所有 Label 的 OnEndDrag 事件 // if Target is TMemo then // (Target as TMemo).Lines.Add((Sender as TLabel).Caption);end;2.3鼠标滚轮事件OnMouseWheel
鼠标滚轮滚动时触发该事件
OnMouseWheelDown
鼠标滚轮向下滚动时触发该事件
OnMouseWheelUp
鼠标滚轮向上滚动时触发该事件
示例:在 Memo 组件中显示鼠标在窗体上滚轮的事件,界面如下图:
示例代码:
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);begin Memo1.Lines.Add('Wheel');end;procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);begin Memo1.Lines.Add('WheelDown');end;procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);begin Memo1.Lines.Add('WheelUp');end;2.4鼠标事件相关的参数
参数
取值
说明
Sender
触发事件的对象
Button
mbLeft
鼠标左键
mbRight
鼠标右键
mbMiddle
鼠标中键
Shift
ssShift
按下Shift键
ssAlt
按下Alt键
ssCtrl
按下Ctrl键
ssLeft
单击鼠标左键
ssRight
单击鼠标右键
ssMiddle
单击鼠标中键
ssDouble
双击鼠标
X|Y
鼠标当前的位置
WheelDelta
滚轮转动的角度
MousePos
鼠标当前的位置
标签: 鼠标
②文章观点仅代表原作者本人不代表本站立场,并不完全代表本站赞同其观点和对其真实性负责。
③文章版权归原作者所有,部分转载文章仅为传播更多信息、受益服务用户之目的,如信息标记有误,请联系站长修正。
④本站一律禁止以任何方式发布或转载任何违法违规的相关信息,如发现本站上有涉嫌侵权/违规及任何不妥的内容,请第一时间反馈。发送邮件到 88667178@qq.com,经核实立即修正或删除。