Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)aaa
published in(发表于) 2014/7/19 0:11:37
delphi拖曳事件实例

delphi拖曳事件实例|教程

拖曳事件

拖曳事件是指在图形界面中,按下鼠标左键不放并将其拖动到某个位置。如在Windows 系统里,可以选中文件或文件夹并将其拖放到其他文件夹,能够实现文件或文件夹的复制或移动操作。

拖曳事件能够方便用户操作,不需要多层命令的选择,只需要利用鼠标拖放即可。以下是常用的拖曳事件。

1.OnDragDrop 事件

在拖曳事件开始时会产生一个OnDragDrop 事件。

2.OnDragOver 事件

当拖曳对象跨过一个组件时会产生一个OnDragOver 事件。

3.OnEndDrag 事件

当拖曳事件结束后会产生一个OnEndDrag 事件。

利用上面的拖曳事件,可以很方便地实现一些拖曳操作,具体过程如下。

(1)拖曳操作开始

大多数的组件具有DragMode 属性, 表示拖曳操作的开始方式。DragMode 属性的默认值为dmManual,也就是要在被拖动组件的OnMouseDown 事件的处理过程中调用BeginDrag 过程才开始拖曳操作。如果将DragMode 属性设置为dmAutomatic,则鼠标左键在被拖动组件上按下后就自动开始拖曳操作。

(2)接受拖曳操作

当拖动一个组件经过第2 个组件的时候,第2 个组件会产生一个OnDragOver 事件。在该事件的处理过程中有一个布尔类型的参数,该参数的设置直接影响是否产生OnDragDrop 事件。

一般情况下,在OnDragOver 事件的处理过程中,事件根据参数Source 判断拖曳操作的源。如果是可以接受的源,则将Accept 参数设置为True;否则,将其设置为False。

(3)处理拖曳操作

在第2 个组件的OnDragDrop 事件的处理过程中,根据拖曳操作的源做一些相应的处理。

(4)拖曳操作结束

拖曳操作完成后释放鼠标左键,在第1 个组件中会产生一个OnEndDrag 事件,该事件可以根据参数Target 的数值进行相应的处理。如果参数Target 的值为nil,则表示拖曳操作没有被接受;如果Target的值不为nil,则Target 的值就是接受拖曳操作的组件。

为了让读者明白以上事件的用法,下面用一个小示例来简要说明拖曳操作的实现过程。本示例窗体上有一个TEdit 组件和一个TMemo 组件,运行后可以在TEdit 组件中输入文字,然后将鼠标移动到TEdit 组件上并按下左键,拖动到TMemo 组件后放开,TEdit 组件中的文字就被添加到TMemo 组件中了。

创建一个新的工程。在窗体中添加一个TEdit 组件和一个TMemo 组件。其中,将TMemo 组件的ReadOnly 属性设置为True。

选择TEdit 组件,为其添加OnMouseDown 事件的处理过程,相应代码如下:

procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if Button = mbLeft then //开始进行拖动操作

(Sender As TEdit).BeginDrag(False);

end;

注意:过程BeginDrag 具有一个布尔型的参数,如果该参数设置为False,表示当按下鼠标左键并拖动一小段距离后才进行拖曳操作;如果设置为True,表示当按下鼠标左键后立即进行拖曳操作。通常将该参数设置为False。

选中Memo 组件并在对象编辑器中为其添加OnDragOver 事件和OnDragDrop 事件的处理代码如

下:

procedure TForm1.Memo1DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

begin

if Source Is TEdit then // 可以接受拖动操作

Accept:=True;

end;

procedure TForm1.Memo1DragDrop(Sender, Source: TObject; X, Y: Integer);

begin

if(Sender Is TMemo) and (Source Is TEdit) then

// 将Edit 组件中的内容添加到Memo 组件的最后

(Sender As TMemo).Lines.Add((Source As TEdit).Text);

end;

保存并运行程序。在Edit1 中输入一些文字,然后将其拖动到Memo1 组件中。




If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759