教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 法律文档 >

Delphi程序设计中的鼠标控制

来源:网络收集 时间:2025-09-18
导读: Delphi程序设计中的鼠标控制 2008-06-28 20:15 在Windows环境下,鼠标和键盘是主要的输入设备。 在Delphi中几乎每个对象都具有反映鼠标控制的事件, 这些事件的主要功能包括改变鼠标指针的形状,移动、触发、拖动鼠标等。 鼠标控制的三个相关属性是Cursor、D

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中拖放的操作

拖放(DragDrop)是Windows提供的一种快捷的操作方式。作为基于Windows的开发工 具,Delphi同样支持拖放操作,而且开发应用系统的拖放功能十分方便,真正体现了 Delphi 的强大功能和方便性。

Delphi提供的所有控件(Control,即能获得输入焦点的部件)都支持拖放操作,并有

相应的拖放属性、拖放事件和拖放方法。下面我们先介绍控件的拖放支持,而后再给出开 发拖放操作的一般步骤和应用实例。 9.1 控件的拖放支持

拖放操作中控件可以分为源控件和目标控件两类。绝大部分控件既可以作为源控件 也可以作为目标控件。但也有一部分控件只能支持其中的一种。 9.1.1拖放属性

拖放属性主要有两个: ●DragMode:拖动模式

它们都是在拖放的源控件中设置。DragMode控制用户在运行时间内当在控件上按 下鼠标时控件如何反应。

如果DragMode置为dmAutomatic,那么当用户在控件上按下鼠 标时拖动自动开始;

如果DragMode置为dmManual(这是缺省值),则将通过处理鼠标事件 来判断一个拖动是否可以开始。 ●DragCursor

用于选择拖动时显示的光标,缺省值是CrDrag,一般不要去修改它。

在程序设计过程中通用的界面规范应该得到开发者的尊重。但有时候为了特定的目的, 开发者也可以把自己设计的光标赋给DragCursor。 9.1.2拖放事件

拖放事件主要有三个(?):

●OnDragOver:拖动经过时激发 ●OnDragDrop:拖动放下时激发 ●OnEndDrag:拖动结束时激发 ●OnStartDrag:拖动开始时激发(?)

前两个事件由目标控件响应,后一个事件由源控件响应。

●OnDragOver事件最主要的功能是确定当用户就地放下拖动时控件是否可以接受。 它的参数包括:

Source:TObject; {源控件} X,Y:Integer; {光标位置} State:TDragState;{拖动状态} var Accept:Boolean {能否接受}

●TDragState是一个枚举类型,表示拖放项目与目标控件的关系。 type TDragState = (dsDragEnter, dsDragLeave, dsDragMove); 不同取值的意义如下表: 表9.1 DragState的取值与意义

━━━━━━━━━━━━━━━━━━━━━━━━━━━ 取值意义

─────── …… 此处隐藏:4238字,全部文档内容请下载后查看。喜欢就下载吧 ……

Delphi程序设计中的鼠标控制.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/434407.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)