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

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;

Windows 8.1 Update 1的下载地址和八点须知 《近匠》棱镜:手游渠道SDK平台的技术历程 OpenSSL究竟为何物,为何它的影响力如此之大? Redis大冒险:如何跳出SQL这个坑 【走近院士】张尧学:基于透明计算的云操作系统 微软转型之路:从Build 2014开始 大势所趋 HTML5成Web开发者最关心的技术 从火种到核心,浅析Hadoop大数据用户的演变 搭建高可用的MongoDB集群(上):MongoDB的配置与副本集 软硬件协同创新,共建未来数据中心 优秀Unix管理员的七个习惯 2014Unity亚洲开发者大会倒计时 干货内容日程汇总 TIOBE 2014年4月编程语言排行榜:Perl跌至历史最低点 Hadoop集群环境下网络架构的设计与优化 CloudFoundry架构优化:NATS集群化方案 Dropbox推独立应用,公司估值已达100亿美元 【走近院士】梅宏:云计算时代软件技术发展需求和挑战 云计算战争:OpenStack vs. VMware Cortana与Siri、Google Now的较量:支持功能更多 代码面试最常用的10大算法 “颠覆医疗” 时云医疗推三款硬件产品 华为章宇:如何学习开源项目及Ceph的浅析 EMC:大数据时代中对于数据保护的重新定义 Google Glass于4月15日在美对外开放购买,售价为1500美元 电脑上的网址怎么样复制到手机 创客天下——《Make》及Maker Faire创办人、O&amp;#039;Reilly Media创始人Dale Dougherty专访 《近匠》aGlass团队:透析眼控技术的价值 一周消息树:超级充电器来袭,30秒可为手机充满电 北森CTO张庆化:利用Spark实现数据驱动价值 大公网冯咀志:站内搜索系统的PowerLinux迁移实践 2014移动开发者必备的十大应用测试工具 请教DataBufferFloat的问题,没什么我的文件说找不到 会不会出BCB6中文版啊 http://go3.163.com/21jsp/cn/com/lyfupload.htm 请问各位:你们怎样在程序中用SQL脚本来建表啊?!!不会是叫客户自已创建表吧? 请进来看看,关于CString和WFC编程的! 关于定义一个struct 的 array问题?帮忙阿 在一个线程内部怎样实现将该线程挂起? 帮我个忙好吗,有关数据库的(我是新手)(很急) 用gcc编译后提示:/tmp/ccn/I193.o: In function "main" ...... delphi的简单问题 关于文件操作 请教,关于网管理论,协议,开发等方面,该看什么书? 提倡:对贴不对人 如何在word 中链接excel 表格后,不让它随源文件更改而变,但有时又要改变其中数据,怎么做 一个代理服务器问题 一个长久以来悬而未决的问题!! 谁有x.25协议包的格式? 在视图上建立快照日志碰到的问题? 求助:怎么用XSL制作网页菜单? 100分求助如何用DirectShow技术创建ASF格式的文件 数字的从大到小排列问题 300分求多线程解决哲学家进餐问题的源码 关于datalist 武汉的朋友帮忙啊! 严打! 我是新手,谁能告诉我如何新建类? 各位GGJJ,帮帮忙!如果每点击一次button建立一个线程,建立多个不同的线程,怎样实现? 请问那位windows98高手可以帮帮忙忙 各位GGJJ,帮帮忙!如果每点击一次button建立一个线程,建立多个不同的线程,怎样实现? 关于XML中NODE的类型的问题(特急!!!) 大家来帮小弟以下啊,!!! 如果我把一个TAdoQuery变量送到子函数中? 谁能告诉我Bjarne Stroustrup应该怎么读? 说了半天到底谁的是正确的?在100分。delete p 是删去p指针,还是它指到的内容,*p。还是删去什么?free(p) 呢? 大家好,我有一个问题问一下你们很急的。我在线等待!!! 我要去上海找工作(java) 在线提问:各位朋友帮忙啊!很急啊! 关于通过telnet修改2000的用户密码问题 请问有无现存的四舍五入函数?(in vc) 请指教有关bde和9i的问题 帮助!谢谢! 着急!!!!!!!!!!!!!!! 关于CHM文件的菜鸟问题 各位帮帮忙,我的程序重要用定时器,怎么做呀? 为什么没法看贴子? 如何在PB8。0上创建可执行文件,,,,,,(请详细一点) 关于TStrings怎样去取值? 如何编程更改IP? 谁来帮帮我!!!!! 生成密码字典,有什么好主意呢?说说好么? 有关c++中何时分配内存的问题 急救!! 如图所示,A、B两球质量相等,A球用不能伸长的轻绳系于O点,B球用轻弹簧系于O′点,O与O′点在同一水平面上,分别将A、B球拉到与悬点等高处,使绳和轻弹簧均处于水平,弹簧处于自然状态,将两球 某小灯泡上标有6V 4W的字样,当加在小灯泡R的电压3V时,通过小灯泡电流为—-A,此时小灯泡的实际功率为—W 在光滑的水平面上两个带等量正电的点电荷M,N分别固定在A,B两点,O为A,B的中点,CD为AB的垂直平分线,在CO之间的F点由静止释放一个带负电的小球P(设不改变原电场分布)在以后的一段时间内,P A,B两球质量相等,A球用不能伸长的轻绳系于O点A、B两球质量相等,A球用不能伸长的轻绳系于O点,B球用轻弹簧系于O′点,O与O′点在同一水平面上,分别将A、B球拉到与悬点等高处,使绳和轻弹簧均 直线度超出公差的变形,其中公差是什么?扭曲是变形的基本形式之一,物体长度没有改变,但其直线度超出公差的变形.其中公差是什么? 在光滑的水平面上两个带等量正电的点电荷M,N分别固定在A,B两点,O为A,B的中点,CD为AB的垂直平分线,在CO之间的F点由静止释放一个带负电的小球P(设不改变原电场分布)在以后的一段时间内,P A,B两球质量相等,A球用不能伸长的轻绳系于O点 A、B两球质量相等,A球用...A,B两球质量相等,A球用不能伸长的轻绳系于O点A、B两球质量相等,A球用不能伸长的轻绳系于O点,B球用轻弹簧系于O′点,O 圆柱的直径公差与其直线度要求有联系吗?如何确定轴是否要求有直线度要求 分别在M、N两点固定放置两个点电荷+Q和-q (Q>q),以MN连线的中点O为圆心的圆周上有四点A、B、C、D为什么答案选D而不是B? 风扇电压5V,功率4W,用5V,2.1A的10W电源会不会比用5V、550M的电源转的快? 商店里的香皂比洗衣粉少21箱,香皂是洗衣粉的16分之9,香皂和洗衣粉各有多少箱? 排污公司每小时可抽30吨水的抽水机来抽排污公司用每小时可抽30吨水的抽水机来抽污水管道里积存的污水,估计积存的污水在1200吨到1500吨之间,那么大约需要多少小时才能把污水抽空?用一元 光滑水平面上,一个质量为2kg的物体从静止开始运动,在前5s受到一个延正东方向大小为4N的水平恒力作用.从第5S末开始改为正北方向大小为2N的水平恒力作用也10S.求物体在15S内的位移和15S末的 商店运来香皂100箱,比洗衣粉多3份之2,运来洗衣粉多少箱? 把同样两节干电池串联或并联起来,再接上同一个小灯泡,小灯泡的亮度一样吗? 光滑水平面上,一个质量为2kg的物体从静止开始运动,在前5秒内受到一个沿正东方向大小为4N的水平恒力作用从第五秒末,开始改受正北方向大小为2N的水平恒力作用了10s,求物体在15s内的位移和1 我想换轮胎,车子是宝来的,应该换什么样的轮胎好用 如图在rt三角形abc中角abc为90度cd垂直ab于dE为ac的中点ed的延长线交cb的延长线于p求证pd的平方等于pb乘pc 小华同学在“测定小灯泡的功率”实验中,所用电源电压为4.5V、7.5V和9V中的一个,滑动变阻器上标有”20Ω 2A”字样,小灯泡标有“4.5V”字样,估计小灯泡的额定功率小于1.5W.他按图连接好电路,当 如果用3台抽水机2小时抽水274.8立方米,照这样计算,5台抽水机要抽完274.8立方米水,需要几小时? 在Rt三角形ABC中,角ACB=90度,CD垂直AB于D,E为AC的中点,ED的延长线交CB的延长线于P.求证:PD的平方=PB×PC 有没有骂男生的词啊?越多越好,不要误会,只是我发现他一直在骗我,想骂他一下,5555555 5V120MA太阳能电池给两节1.2V2500MAH NI-MH电池充电,电池串联好还是并联好,还需要什么电路谢谢 RT三角形ABC中,角BAC=90°,AD垂直BC于D,E是AC上的中点,连ED且延长交AB延长线于F点,求证AB:AC=BF:DF 骂人的字,词语,越多越好越多越好!一个一分 电池充电并联电容会增大充电电流吗 关于点电荷产生的电场,正确的是() A.当某点与点电荷间的距离r→∞时,该点电场强度E→0B.当某点与点电荷间的距离r→0时,该点电场强度E→∞C.没有两个点的电场强度是相同的D.与点电荷距 骂小人的诗句、句子、话.越多越好!我要骂的人他真的.....无法用语言表达! 放在粗糙水平面上的物块A、B用轻质弹簧秤相连,如图所示,物块与水平面间的动摩擦因数均为μ,今对物块A施加一水平向左的恒力F,使A、B一起向左匀加速运动,设A、B的质量分别为m、M,则弹簧秤 在点电荷Q产生的电场中,距Q为r处的A点有一电量q的点电荷,若把q移到离Q的距离为r/2的B点则它在B点受到的电场力大小_____?(大于,小于,等于 选填)它在A点受到的电场力. 怎么样把1.5V的电池接成0.3V的电压,用二极管怎么接,需要什么型号的,要几个,谢谢大侠.详细点. 如图(甲)所示,完全相同的A、B两物体放在水平面上,与水平面间的动摩擦因数均为μ=0.2,如图(甲)所示,完全相同的A、B两物体放在水平面上,与水平面间的动摩擦因数均为μ=0.2,每个物体 点电荷Q的电场中,电量q=1.0×10^-10C点电荷P与点电荷Q的距离r=0.1m处受到的电场力为9.0×10^-5N已知静电力常量k=9.0×10^9,求1)点电荷Q在P处的电场强度多大?2)点电荷Q的电量多大 运动的物体初速度3m/s,质量7kg,在14N的恒力作用下,5s末速度多大?5s内通过的路程是多少? 直线度公差的形状有 种形状,具有这几种公差带形状的位置公差项目有 两个固定的异种点电荷,电荷量给定但大小不等.用E1和E2分别表示这两个点电荷产生两个固定的异种点电荷,电荷量给定但大小不等.用E1和E2分别表示这两个点电荷产生的电场强度的大小,则在通 继电器额定电压是24v,其实际工作电压范围是多少 形状公差 圆度用什么工具测量?回答不要那么复杂?一定要准确!Thank you 如图所示,固定于同一条竖直线上的A,B是两个带等量异种电荷的点电荷,如图所示,固定于同一条竖直线上的A、B是两个带等量异种电荷的点电荷,电荷量分别为+Q和-Q,A、B相距为2d.MN是竖直放置 一个做匀变速直线运动的质点,初速度为0.5m/s,在第9s内比第5s内的 2.5V630F超级电容,我用两节5号电池并联,充电大约要多久?放电呢?放电时就相当于直接短路,要求在最短的时间里得到最大的电流.求放电时间. 物理;在两个带电荷量均为Q、相距L的等量异种点电荷的连线上o点是两电荷连线的中电,A ,B是关于o对称的两点,如图所示,一带电荷量为q的粒子(重力不计),从A点运动到B点 (1)若A点到正点 一个做匀变速直线运动的物体,初速度为0.5m/s,在第9s内的位移比第5s内的位移多4m一个做匀变速直线运动的物体,初速度为0.5m/s,在第9s内的位移比第5s内的位移多4m,求:(1)物体的加速度(2)物 如何让4节12V电池串联充电(48V充电),并联放电(12V放电)求稳定设计电路图.可以使用1个或者多个继电器和开关,不考虑是否影响电池寿命的问题(本身是旧电池).希望目标:我电动车本身 用两台水泵抽水,小水泵抽六小时,大水泵抽八小时,一共抽水三百一十二立方米.小水泵5小时的抽水量等于大水泉2小时的抽水量,两种水泵每小时各抽水多少立方米? 图为测定运动员体能的装置,绳拴在腰间沿水平线跨过定滑轮,不计摩擦.下悬重为G的物体设人的重心相对地面不动,人用力向后蹬传送带A人对重物做功,功率为GvB人对传送带的摩擦力大小等于G, ⑵ 在动滑轮的重力 _________物体的重力的条件下,使用动滑轮才省力. 抽水量需求200立方每小时,高差280m,平距650m,请给出最佳抽水方案,包括泵站数量,抽水机型号.抽水量需求200立方每小时,高差280m,平距650m,请给出最佳抽水方案,包括泵站数量及布置情况,抽水机型 弹簧的弹力总是和弹簧的长度成正比 是否正确弹簧的弹力总是和弹簧的长度成正比是否正确 电解电容器的工作电压能比额定电压小吗 如图所示,质量M=10kg的木锲ABC静止于粗糙水平面上,摩擦因素为0.02,在木切的倾角为37°的斜面上,有一质量为1KG的物块,由初速度为V=7.6m/s开始向斜面上滑,在一过程木锲没有动.1.物块在斜面上运动 要骂人的话,最好是由短英文字母组成.例如:SB 一个标有8V 4W的用电器,接入电源电压为4.8V的电路中,则这个用电器的实际功率为 质量M=10kg的木锲ABC静止于粗糙水平面上,摩擦因素为0.02,在木切的倾角为30°的斜面上,有一个质量m=1.0kg的物块由静止开始沿斜面下滑,当滑行路程s=1.4m时,其速度v=1.4m/s.在这个过程中木楔未动. 骂人的话,四个英文字母组成 某电器标有6V 4W 字样 如果把改用电器接到3V的电源上,它的实际功率是多少.急 如图,两等量异号的点电荷相距为2a.M与两点电荷共线,N位于两点电荷连线的中垂线上,两点电荷连线中点到答案是AC 求分析每一个选项谢谢TUT 如图所示,A、B两球质量相等,A球用不能伸长的轻绳系于O点,B球用轻弹簧系于O′点,O与O′点在同一水平面上,分别将A、B球拉到与悬点等高处,使绳和轻弹簧均处于水平,弹簧处于自然状态,将两球 将如下四个用电器并联接入3V电源两端,哪个用电器消耗电能最快()A、“3V 1W” B、“3V 0.5A” C、“6V 2W” D、“12V 0.5A”理由要说详细点 如图所示,M、N两点分别放置两个等量异种电荷,A为它们连线的中点,B为连线上靠近N的一点,C为连线的中垂线上处于A点上方的一点, 在A、B、C三点中 ( )A.场强最小的点
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘