Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)aaapublished in(发表于) 2014/7/19 0:11:37 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);beginif 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);beginif Source Is TEdit then // 可以接受拖动操作Accept:=True;end;procedure TForm1.Memo1DragDrop(Sender, Source: TObject; X, Y: Integer);beginif(Sender Is TMemo) and (Source Is TEdit) then// 将Edit 组件中的内容添加到Memo 组件的最后(Sender As TMemo).Lines.Add((Source As TEdit).Text);end;保存并运行程序。在Edit1 中输入一些文字,然后将其拖动到Memo1 组件中。
赞