DELPHI中鼠标的各种操作

本文详细介绍了在Delphi编程中如何控制鼠标,包括改变鼠标指针形状、响应鼠标移动、处理鼠标按键以及实现拖放操作。通过设置属性如Cursor、DragCursor和DragMode,以及使用BeginDrag、Dragging、EndDrag等方法,可以实现从简单的鼠标形状改变到复杂的拖放功能。此外,文章还讨论了OnMouseMove、OnMouseDown、OnMouseUp、OnDragDrop和OnDragOver等事件的使用,展示了如何在Delphi中创建动态对象并实现拖拽效果。
摘要由CSDN通过智能技术生成

{鼠标:右击,左击,单击,双击,滚轮,拖曳}
Delphi程序设计中的鼠标控制
2008-06-28 20:15
在Windows环境下,鼠标和键盘是主要的输入设备。

在Delphi中几乎每个对象都具有反映鼠标控制的事件,
这些事件的主要功能包括改变鼠标指针的形状,移动、触发、拖动鼠标等。
鼠标控制的三个相关属性是Cursor、DragCursor、DragMode;
鼠标(拖拽)控制的三个对象方法是BeginDrag、Dragging、EndDrag;
鼠标控制的七个事件包括OnDragDrop等。

一、改变鼠标指针的形状
  改变鼠标指针的形状在Windows环境下是不可缺少的功能。
当应用程序在执行一个较长时间的指令或动作时,
我们可以改变鼠标指针的形状来通知用户程序执行的状态,
等到执行的动作完成之后,再把鼠标指针的形状变回来。
此外,在拖动的过程中我们也可以改变鼠标指针的形状,使拖动的过程更加清楚。
  在编辑过程中,我们可以用属性Cursor和DragCursor改变鼠标指针的形状,
前者是记录鼠标指针在对象上出现的情况;后者是设定对象被拖动时鼠标指针的形状。
对于这两个属性,Delphi提供了如下值供用户选择:cdDefault、crArrow、cdCross、crBeam、crSize等十几个属性值。

二、鼠标的移动
  鼠标移动时会触发事件OnMouseMove,语法如下:
  procedure ObjectMouseMove(Sender:TObject;Shift:TshiftState;X,Y:Integer)
其中参数Sender代表((目标对象)),参数Shift代表鼠标移动时需同时按下的组合键,
由{ssShift,ssAlt,ssCtrl,ssRight,ssLeft,ssMiddle,ssDouble}组成。
此外,我们也可以利用参数X和Y取得鼠标移动的坐标位置,通常我们使用OnMouseMove事件时,最重要的就是这两个参数。

三、鼠标按键
  鼠标按键在窗口环境中也是最重要的输入方法之一,
同时还可以配合Shift,Alt,Ctrl三个键而发挥不同的作用。
和鼠标按键有关的事件有OnMouseDown和OnMouseUp。
当用户按下鼠标的一个键后,会触发OnMouseDown事件,其语法如下:
  procedure ObjectMouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
  参数Button指出按下的鼠标键是哪一个,可以是{mbLeft,mbRight,mbMiddle}三者之一。
   参数Shift可以反映按下的键盘键与鼠标的关系,
   其值是由{ssShift,ssAlt,ssCtrl,ssLeft,ssRight,ssMiddle,ssDouble}所组合而成的集合,
   这些参数值分别代表Shift,Alt,Ctrl键、鼠标的左、中、右键,及同时按下左右键。
   例如,同时按下鼠标的右键和Alt键,参数Shift的值就是{ssAlt,ssRight}。

四、鼠标的拖动(细节)
  (一)启动拖动状态
  拖动状态的方式及启动是根据属性DragMode值的设定而决定的,可以分成两类情况:
  1.不必程序控制 如果DragMode的值是dmAutomatic,当鼠标左键一按,对象就自动进入拖动状态。
  2.需要程序控制 如果DragMode的值是dmManual,要使对象进入拖动状态,可以调用方法BeginDrag。
  此外,Delphi提供一个对象方法Dragging,让程序判断对象是否进入拖动状态。
如果返回值是TRUE,代表已进入拖动状态,否则就是没有。
要使对象进入拖动状态,可以调用对象方法BeginDrag。
当对象进入拖动状态时,事件OnStartDrag会被触发,有关语法如下:
  对象方法Dragging语法如下:
  function Dragging:Boolean;
  对象方法BeginDrag语法如下:
  Procedure BeginDrag(Immediate:Boolean);
  事件OnStartDrag语法如下:
  Procedure ObjectStartDrag(Sender:TObject;Var DragObject:TDragObject);
  (二)拖动中的事件
  关于对象在拖动状态的事件有两个:OnDragDrop和OnDragOver。
假设把对象A拖动并放入对象B中,此时对象B的事件OnDragDrop会被触发。其语法如下:
  procedure ObjectDragDrop(Sender,Source:TObject;X,Y:Integer);
  参数Sender和Source分别代表目标对象B及被拖动的对象A,
参数X,Y代表拖动结束时的位置坐标,此坐标是以目标对象的坐标为参考的,
而实际上拖动中的对象并不是真的移动,所以以X,Y的值将对象移到新的位置。
  (三)停止拖动
  如果要停止拖动,可以使用对象方法EndDrag来完成;其语法如下:
  procedure ObjectEndDrag(Drop:Boolean);
  参数Drop若是Ture,被拖动的对象将被放置于与目前所在的位置;
否则,对象的拖动就被放弃,而回到原来的位置。
例如下面的程序段就代表对象Lable1放弃拖动,并恢复原状:
  Lable1.EndDrag(False);
  而停止拖动会触发事件OnEndDrag,其语法如下:
  Procedure ObjectEndDrag(Sender,Target:TObject;X,Y:Integer);
  不管是放弃拖动或是对象已经拖动到目标对象,均会触发这个事件。
参数Sender和Target分别指向被拖动对象(源)及目标对象,但是如果拖动没有成功,则Target值为nil。

补充:
DELPHI中拖放的操作

拖放(Dr

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值