说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi拖放编程(1)

HTML文档下载 WORD文档下载 PDF文档下载
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虽然不是一个专门的拖放事件,但在人工模式下拖动的开始是在这一事件的处理过程中实现的。

9.1.3拖放方法

拖放方法有三个:

●BeginDrag:人工方式下开始一个拖动

●EndDrag:

结束一个拖动

●Dragging:判断一个控件是否正被拖动

这三个方法都被源控件使用。

当DragMode置为dmManual时,拖动必须调用控件的BeginDrag方法才能开始。

BeginDrag有一个布尔参数Immediate。如果输入参数为True,拖动立即开始,光标改变到DragCursor的设置。如果输入参数为False,直到用户将光标移动了一定的距离(5个象素点)后才改变光标,开始拖动。这就允许控件接受一个OnClick事件而并不开始拖动操作。

EndDrag方法中止一个对象的被拖动状态。它有一个布尔参数Drop。如果Drop设置为True,被拖动的对象在当前位置放下(能否被接受由目标控件决定);如果Drop设置为False,则拖动就地被取消。

下面一段程序表明当拖动进入一控制面板时拖动被取消。

procedure TForm1.Panel1DragOver(Sender

Source: TObject; X

Y: Integer;

State: TDragState; var Accept: Boolean);

begin

Accept := False;

if (Source is TLabel) and (State = dsDragEnter) then

(Source as TLabel).EndDrag(False);

end;

Draging方法判断一个控件是否正被拖动。在下面的例子中当用户拖动不同的检查框时窗口改变为不同的颜色。

procedure TForm1.FormActivate(Sender: TObject);

begin

CheckBox1.DragMode := dmAutomatic;

CheckBox2.DragMode := dmAutomatic;

CheckBox3.DragMode := dmAutomatic;

end;

procedure TForm1.FormDragOver(Sender

Source: TObject; X

Y: Integer;

State: TDragState; var Accept: Boolean);

begin

if CheckBox1.Dragging then

Color := clAqua;

if CheckBox2.Dragging then

Color := clYellow;

if CheckBox3.Dragging then

Color := clLime;

end;

云智能手机,将会很快威胁到Android和iPhone? 直接拿来用!超实用的Java数组技巧攻略 腾讯云俱乐部上海站:电商如何利用云提高核心竞争力 iOS开发者必备:六大图片、图标处理类工具 腾讯向搜狗注资4.48亿美金持股36.5% 推荐五款流行的JavaScript模板引擎 为何人人都将成为程序员?看32位美国顶尖精英的说法! MySQL再度失势:继维基百科之后,Google也迁移到了MariaDB Werner Vogels:亚马逊热爱艺术的CTO Jolla宣布Sailfish OS兼容Android手机硬件和应用 为什么项目估算偏差如此之大? Cloud Connect大会Day2:开源与云数据中心 CTO俱乐部第110期下午茶:利用麦肯锡7S模型构建管理框架 跨平台打造移动原生应用的10大武器 iOS与Android本地数据库新选择:使用Objective-C和Java编写 Cloud Connect大会day3:Intel的大数据与Metacloud私有云 农民也玩数据挖掘:基于物联网的高端种菜模式 前谷歌Android开源项目主管Queru加盟雅虎 Windows 8.1售价出来了!分别是119.99美元、199.99美元 对AngularJS进行性能调优的7个建议 为什么说UX设计师的黄金时代已来临? 豌豆荚:“应用内搜索”是打通移动互联网最具竞争力的入口 苹果发布会后的冷思考,64位芯片为开发者带来了什么? 中兴Geek评测:高性价比的英特尔处理器智能机 SAE的资源、安全隔离与Container 平板电脑悬了 Phablets或成为未来移动设备的主流 拿什么拯救你:黑莓今年将裁员4500人 推荐10款免费的在线UI测试工具 最好的Java IDE之争:Eclipse PK IntelliJ IDEA Intel发布E5 2600 v2处理器 开放硬件监控信息 XP寿终大限将近 微软再次呼吁用户尽早“分手” =急=急=急=这个SQL语句是什么意思?? 从数据库读出的一个问题 我昨天在使用过程中发现如下问题,希望能得到您的答复! 请教一个如何写如下的存储过程:查找'abcd',允许错两个字符(错误位置任意),例如'abef'可以, 但是'aefg'不行 小弟学习c有一段时间,究竟学到什么程度才能开始学c++呀? 各位,有没有碰到过这种情况! =急=急=急=大家来看看这个SQL语句是什么意思~~ 在ACESS2000的查询中如何/可否使用ISNULL函数。请举例。 c++ 搞什么呀?不是说有专家回答吗?人呢? blob字段的长度限制是:????? 这样的公司我呆下去还有没有意义? unix 消息队列 这是什么意思??? XML还有什么好处? 读写文本文件的问题??急 程序中每一个按钮和动作对应一个存储过程好吗? 按回车键时,在TEXT中输入大于号怎么实现,谢谢! 请问高手:怎样在interDev6.0中调试程序??? 在jb6中,如何制作包含jdbc和自定义包的jar文件。 问一个很菜的问题:怎么使用编译器? 一个让我头疼的问题,大家来帮帮我! 送分!!!送分!!!!救命救命!!一共200分 何处有单独的SQL Anywhere 5.5下载,只是驱动一下,并不用PowerBuilder开发 www.%s.co.cn如何解决? 请问怎样用VBA将office文档转换为txt文件?? 绝对超难问题,答对的话给50分!!! 为学java散分 说说borland c++的发展史吧 谁能告诉哪里能申请教育网的免费邮件地址,或你给我一个算了,100分给你! BP神经元网络算法的原代码 如何在网页上看ASP的原码? 我用另一台机的SYBASE备份文件拿到本机来恢复,居然不行!请教高手! 关于模板的问题,还请大家多多指点! 我用串口接受数据,可是??? 焦急中!!!vc里面的spin控件和editbox控件联系起来怎么编程? 简单任务,快来完成啊………… 有奖赏的 100分哪…… 我的程序把数据集另存为Excel时,在未关闭程序的情况下为何无法打开Excel.代码如下... 把一个html分成左右两个frame。现在需要使用scrolling的时候,好像是在一个页面里面一样。请问。可以用javascript实现吗? 关于从客户端访问Sybase数据库的问题??? 正在看《Visual Basic编程标准》,我想不管是新手还是老手,建议大家都看看!!!推荐!!!!!!!! ado+access更新数据时提示"缺少更新或刷新的键列信息"?为什么 一个有关用户对象的问题。 如何动态生成数据库? 哪位高手知位道什么在打开嵌入WORD文档时会出现激活对象出错? 关于actionlist的使用技巧 有没有哪位碰过C1853错误? 请问VC中将字符串转换为Float型有直接的函数吗? 特憋火,一早打电话去两家公司询问是否招程序员,第一句话就是什么时候毕业的,学历是?俺一回答中专,那一头就说中专不予考虑啪地电话挂 请教!delphi与winxp的关系??? 下面代码错在那里????? Al的化合价 辩论赛 是按课表上课好,要正方 辩论词,今天就要.急 氨分子 和 四氯化碳分子 是正四面体 结构的吗 Cl和S的最高化合价和最低化合价分别是多少? 学英语和语文哪个重要 辩论赛的开场词班上要开辩论赛 主题是学英语和学语文哪个重要 二、 辩论赛程序(由辩论会主席执行) 1、 辩论赛开始,宣布辩题 2、 介绍参赛代表队及所持立场, CH4分子为正四面体结构的分子,CCl4和CH3Cl分子也是正四面体结构的分子吗? 电源高压电解电容两端存在310VDC-450VDC电压,请问放电电路该怎样去设计才合理? 英语辩论赛的辩论词男女生是否可以交朋友的英语辩论词. 我是正方的. 就是男女生可以交朋友的理由. 朋友们出出主意, 悬赏分数会再加的. 慢回弹记忆枕头的好处 用丝绸摩擦玻璃棒产生那种电荷?为什么?用丝绸摩擦玻璃棒产生那种电荷?用毛皮摩擦玻璃棒产生那种电荷?说明原因! 急求英语辩论赛稿词正方 crime does pay Healthman的记忆床垫效果怎样啊? 一细线弯成半径为R 的半圆形,其左半部分均匀分布电荷+Q右半部分均匀分布电荷-Q 求圆心处场强 探究凸透镜成像.成像条件,成像规律,成像特点 慢回弹记忆床垫是什么? 一根均匀带电的金属棒弯成半圆,半径为R,电荷线密度为a求圆心处的场强是多少?要求用微元法做,不能用微积分 半径为R的绝缘圆环上均匀地带有电荷量为+Q的电荷,另一带电荷量为+q的点电荷放在圆环O处,由于对称性,点电荷受力为0,现将圆环上截去一小段AB,AB=L,求此时点电荷所受静电力大小? 牛顿运动定律的题1 如图4-6-7,质量m=2kg的物体静止在水平面上,物体与水平面间的滑动摩擦力大小等于它们间弹力的0.25倍.现在对物体施加一个大小F=8N、与水平方向夹角θ=37°角的斜向上的拉 当电容器被击穿时,b和电压表示数会如何变化 . 性价比比较好的太空记忆棉床垫有什么牌子呢? 均匀带电球面内部电场强度内部存在场强 但是由于是球型且均匀 故总是有相对方向且等强度的电场将其抵消.如果是在球心可以相互抵消,但如果不在球心也能抵消吗? 要剪切如图所示的甲、乙两种直角梯形零件,且使两种零件的数量相等,有两种面积相等的矩形铝板可供选用:第一种长500mm,宽300mm(图2);第二种长600mm,宽250mm(图3)1、填空:为了充分利用 记忆棉床垫哪个牌子好 为什么天然金刚石是正八面体结构?这与它的正八面体原子排布有关吗?为什么? 凸透镜成像:物距小于凸透镜的焦距,成的虚像像距有无范围?如果有,是什么? 光的反射定律是什么?光的折射定律是什么? 平面镜成像是光的什么现象引起的?在线=! 在凸透镜成像的实验中可以发现,实像和虚像的分界点是物体在_处,成放大像和缩小像的分界点是物体在_处,把物体放在__处不成像 如何用光的反射定律作平面镜成像?如题 凸透镜成像是光的什么现象?1 在探究凸透镜成像中,如何求虚像的像距啊!急需,快! 如何利用光的反射定律说明平面镜成像的原理? 石墨 二氧化硅 金刚石 钠的熔点比较 Healthman慢回弹记忆床垫好不好? 光的反射定律和折射定律的区别 光直线传播的现象 A:小孔成像 B:水中的倒影 C:凸透镜成像 D:影子的形成多选题.考试我选的AD,但答案是ACD.这是答案错了还是就是直线传播. AL 在化合时化合价的取用?+2?+3?Fe与酸反应怎样选化合价?还有其他的? 金刚石的正四面体结构与其晶胞正方体中顶点面心有碳原子的关系 请告我八年级物理小孔成像,平面镜成像,凸透镜成像所有的成像规律, 在凸透镜成像的实验中,当物距_______时,一定成虚像 正方体有几个顶点?为什么?为什么会有8个顶点 能不能给我一道题,把小孔成像、平面镜成像、凸透镜成像都结合在一起的? Al(NO3)3的N的化合价怎么求 一个正方体,去掉一个角后,剩下的部分有几个顶点. 写得详细点! 将光敏电阻R 和定值电阻R0 、电流表、电压表连成电路,接在9V 的电源上,光敏电阻阻若电流表的示数增大,表将光敏电阻R 和定值电阻R0 、电流表、电压表连成电路,接在9V 的电源上,光强E/cd123456 Tempur慢回弹太空枕和Healthman的哪个效果好点?拜托各位了 3Q 集成吊顶和铝扣板集成吊顶的区别?最近家里房子在装修,去看了好多集成吊顶的样板.现在很郁闷的是集成吊顶和铝扣板集成吊顶到底是什么区别?难道是一回事?很郁闷~ 五氯化磷在固体状态时,由空间构型分别是正四面体和正八面体两种离子构成,下列说法正确的是?A.五氯化磷固体是分子晶体B.五氯化磷具有良好的导电性C.五氯化磷晶体有[PCl3]2+和[PCl7]2—构成, 介质是如何带电的 太空记忆棉床垫怎么样,真的有说的那么好吗? 金刚石都是正八面体吗为什么纯净金刚石是正八面体钻石不是正八面体 也是金刚石啊 A和B是两个大小相同的带电介质小球,A在B的左侧,它们是用等长绝缘细线悬挂在水平杆上,在两球连线的延长线上A球左侧放一个带正电荷的小球C时,A、B两球的悬线都保持竖直方向,则下列说法中 铝扣板吊顶和集成吊顶有区别啊?什么牌子质量好呢?RT 金刚石的结构为什么在人教版初中课本上说是正八面体结构呢? 化合价升高=化合价降低=化合价改变总数怎么理解前面俩个东西能理解,但是怎么会等于化合价改变总数?举例说明一下. 最好的记忆棉床垫是什么品牌 理论上物质要是超越金刚石八面体的硬度 需要怎么样的原子结构? 牛顿三大定律的内容 装修店面的铝格栅吊顶价格是怎样的? NH4+是正四面体结构吗?(与CCl4一样?)
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘