第九章-Delphi拖放编程(1)

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

Delphi提供的所有控件(Control,即能获得输入焦点的部件)都支持拖放操作,并有相应的拖放属性、拖放事件和拖放方法。下面我们先介绍控件的拖放支持,而后再给出开发拖放操作的一般步骤和应用实例。 

9.1 控件的拖放支持 

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

9.1.1 拖放属性 

拖放属性主要有两个:

● DragMode : 拖动模式

● DragCursor : 拖动光标 

它们都是在拖放的源控件中设置。DragMode控制用户在运行时间内当在控件上按下鼠标时控件如何反应。如果DragMode置为dmAutomatic,那么当用户在控件上按下鼠标时拖动自动开始;如果DragMode置为dmManual(这是缺省值),则将通过处理鼠标事件来判断一个拖动是否可以开始。

DragCursor用于选择拖动时显示的光标,缺省值是CrDrag,一般不要去修改它。在程序设计过程中通用的界面规范应该得到开发者的尊重。但有时候为了特定的目的,开发者也可以把自己设计的光标赋给DragCursor。 

9.1.2 拖放事件 

拖放事件主要有三个:

●OnDragOver:拖动经过时激发

●OnDragDrop:拖动放下时激发

●OnEndDrop :拖动结束时激发 

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

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

Source : TObject;  {源控件}

X,Y : Integer; {光标位置}

State : TDragState; {拖动状态}

var Accept : Boolean {能否接受} 

TDragState是一个枚举类型,表示拖放项目与目标控件的关系。 

type

TDragState = (dsDragEnter, dsDragLeave, dsDragMove);

不同取值的意义如下表:

表9.1 DragState 的取值与意义

━━━━━━━━━━━━━━━━━━━━━━━━━━━

取 值 意 义

───────────────────────────

dsDragEnter 拖动对象进入一个允许拖动对象放下

的控件中。为缺省状态。

dsDragLeave 拖动对象离开一个允许拖动对象放下

的控件。

dsDragMove 拖动对象在一个允许拖动对象放下的

控件内移动。

━━━━━━━━━━━━━━━━━━━━━━━━━━━  

用户可以利用提供的参数来确定放下的拖动是否可被接受,如:

● 判断源控件类型: 

Accept := Source is TLabel;

● 判断源控件对象: 

Accept := (Source = TabSet1);

● 判断光标位置:

见(9.2),(9.3)中的例程。 

● 判断拖动状态: 

If (Source is TLabel) and (State = dsDragMove) then

begin

source.DragIcon := ' New.Ico ';

Accept := True;

end

else

Accept := False;

当Accept=True时,目标控件可以响应OnDragDrop事件,用于确定拖动被放下后程序如何进行处理。

OnDragDrop事件处理过程的参数包括源控件和光标位置。这些信息可用于处理方式的确定。

OnEndDrag事件是在拖动操作结束后由源控件来进行响应的,用于源控件进行相应的处理。拖动操作结束既包括拖动放下被接受,也包括用户在一个不能接受放下的控件上释放了鼠标。该事件处理过程的参数包括目标控件(Target)和放下位置的坐标。如果Target=nil, 表示拖动项目没有被任何控件接受。

在第3节将介绍的文件拖放移动、拖放拷贝操作中,如果操作成功,则文件列表框应更新显示内容。下面这段程序用于实现这一功能。 

procedure TFMForm.FileListEndDrag(Sender, Target: TObject; X, Y: Integer);

begin

if Target <> nil then FileList.Update;

end;

除以上介绍的三个事件外,还有一个事件OnMouseDown 也常用于拖放操作的响应。OnMouseDown虽然不是一个专门的拖放事件,但在人工模式下拖动的开始是在这一事件的处理过程中实现的。 

时间: 2024-12-22 14:48:16

第九章-Delphi拖放编程(1)的相关文章

第九章-Delphi拖放编程(4)

9.3 拖放应用实例:文件管理器的拖放支持 在第六章最后开发的文件管理器应用实例,虽然功能上已初具规模,但在操作上与Windows的文件管理器相比还有很大不足.其中最大的缺陷是它不支持文件的拖放移动和拖放拷贝.在这一章结束的时候,我们可以来弥补这一缺陷了. 文件拖放移动指的是当用户把一个文件拖动到目录树下的某一目录并放下时,文件将自动移动到该目录中:文件拖放拷贝指的是当用户把一个文件拖动到某个驱动器标签上并放下时,文件将自动拷贝到该驱动器的当前目录下.作为源控件的文件列表框和作为目标控件的目录树

第九章-Delphi拖放编程(2)

9.1.3 拖放方法 拖放方法有三个: ●BeginDrag : 人工方式下开始一个拖动 ●EndDrag : 结束一个拖动 ●Dragging : 判断一个控件是否正被拖动 这三个方法都被源控件使用. 当DragMode置为dmManual时,拖动必须调用控件的BeginDrag方法才能开始.BeginDrag有一个布尔参数Immediate.如果输入参数为True,拖动立即开始,光标改变到DragCursor的设置.如果输入参数为False,直到用户将光标移动了一定的距离(5个象素点)后才改

第九章-Delphi拖放编程(3)

9.2.2 接收拖动项目 一个控件能否接收拖动项目是由该控件的OnDragOver事件决定的.在TabSet拖动中,主要是利用鼠标的位置进行判断. procedure TForm1.TabSet1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var DropPos: Integer; begin if Source = TabSet1 then begin Dro

《.net编程先锋C#》第九章 配置和调度(转)

编程 第九章 配置和调度在上一章,你学到如何创建一个通用语言运行时(CLR)组件,且如何在一个简单的测试应用程序中使用它.虽然CLR组件就要准备装载了,但你还是应该思考以下技术之一:.条件编译.文档注释.代码版本化 9.1 条件编译 没有代码的条件编译功能,我就不能继续工作.条件编译允许执行或包括基于某些条件的代码:例如,生成应用程序的一个查错(DEBUG)版本.演示(DEMO)版本或零售(RELEASE)版本.可能被包括或被执行的代码的例子为许可证代码. 屏幕保护或你出示的任何程序.在C#中,

第二章-Delphi面向对象的编程方法(三)(2)

2.1.9.4 字符串类型 字符串类型事实上是一个一维的字符数组.当您说明一个字符串型的变量时,您应当指明这个字符串的大小,下面是说明字符串类型的例子: type MyString: string[15]; var MyName: MyString; 则变量MyName被说明成为最多可以包含15个字符.如果您没有说明字符串的大小,Delphi会认为字符串包含最大值255个字符.给字符串赋值可以直接使用单引号括起的字串赋值: MyName := 'Frank.Smith'; 或MyName :=

新手求教 谢谢-c primer plus 编程练习第九章

问题描述 c primer plus 编程练习第九章 设计函数chline(ch, i, j),实现指定字符在i列到j列的输出,并用一个简单的驱动程序测试该函数. #include<stdio.h> void chline(char ch , int i , int j); int main(void) { int i = 0; int j = 0 ; char ch = ' '; printf("enter the char you want to print:"); c

3D编程:第九章 Normal Mapping and Displacement Mapping

第九章 Normal Mapping and Displacement Mapping 本章主要讲述两种图形学技术,支持在不增加objects的poly primitive的情况下,在场景中增加更多的细节.第一种是normal mapping,通过创建一些"fake" geometry(虚设的多边形图元)模拟光照作用.第二种是displacement mapping,根据纹理数据moving vertices actually(与"fake"相对应,这里指真实的移动

第十九章-Delphi自定义部件开发(一)(1)

Delphi除了支持使用可视化部件所见即所得地建立应用程序外,还支持为开发应用而设计自己的部件. 在本章中将阐述如何为Delphi应用程序编写部件.这一章将达到两个目的: ● 教你如何自定义部件 ● 使你的部件成为Delphi环境的有机组合部分 19.1 Delphi部件原理 19.1.1 什么是部件 部件是Delphi应用程序的程序构件.尽管大多数部件代表用户界面的可见元素,但部件也可以是程序中的不可见元素,如数据库部件.为弄清什么是部件可以从三个方面来考察它:功能定义.技术定义和经验定义.

022_《Delphi模式编程》

<Delphi模式编程> Delphi 教程 系列书籍 (022) <Delphi模式编程> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf   作者: 刘艺 丛书名: Borland/Inprise核心技术丛书 出版社:机械工业出版社 ISBN:7111149491 上架时间:2004-9-11 出版日期:2004 年9月 开本:16开 页码:509 版次:1-1 内容简介 <delphi模式编程>是一本delphi程序员的模式入门和