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

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;

$.each(obj, fn)-JQuery API $.extend(target,prop1,propN)-JQuery API $.grep(array,fn,inv)-JQuery API $.map(array, fn)-JQuery API $.merge(first,second)-JQuery API $.trim(str)-JQuery API Ajax-JQuery API $.ajax(properties)-JQuery API $.ajaxSetup(settings)-JQuery API $.ajaxTimeout(time)-JQuery API $.get(url, params, callback)-JQuery API $.getIfModified(url, params, callback)-JQuery API $.getJSON(url, params, callback)-JQuery API $.getScript(url, callback)-JQuery API $.post(url, params, callback)-JQuery API ajaxComplete(callback)-JQuery API ajaxError(callback)-JQuery API ajaxSend(callback)-JQuery API ajaxStart(callback)-JQuery API ajaxStop(callback)-JQuery API ajaxSuccess(callback)-JQuery API load(url, params, callback)-JQuery API loadIfModified(url, params, callback)-JQuery API serialize()-JQuery API Accordion(settings)-JQuery API activate(index)-JQuery API button(hash)-JQuery API center()-JQuery API $.cookie(name)-JQuery API $.cookie(name, value, options)-JQuery API height()-JQuery API 50分悬赏||____||一个常识问题 java界面控制 有关ASP+ACCESS的查询数据出错,报错 “超出系统资源。 ” java界面控制 求一用php实现压缩/解压缩的程序. 请问在WORD200中有什么好的方法在下划线中输入文字,而下划线不随字体而改动? Excel中保护工作表? 请问使用16倍速的刻录机能刻32倍速的盘吗 MYSQL如何实现自动删除数据库中的记录 紧急提问:CB中那些类用.操作符 请问一个概念的问题:??????????????????????? 如何生成报表文件啊? 装了oracle8i以后怎么登陆不了? 如何按照记录号转到指定的记录?不用SQL 用过magicskin的请进。 无法于数据库建立信任连接的问题_高分有送! 偶这个星期到深圳去,不知道在深圳有那些途径可以找到工作的? 手机掉到马桶里你会怎么办? 各位前辈帮忙看一下这个语句怎么解决(这是一个关于SQL语句的问题) 请教 java 命令的用法 用session跟踪用户的问题。 Xml中查找最大值! 请PHP高手推荐几本高阶的PHP书籍 偶这个星期到深圳去,不知道在深圳有那些途径可以找到工作的? Unicode问题 str:=#0+'9'+#0+'5'+#0+'8'+'~'+#207+'m'+'N' 在线等待。。 定位文件指针? 如何用ADO动态建SQL数据库 哪有 《Visual C++ 实践与提高——COM和COM+篇》下载 iis 为啥总出现 "the special module not found" 学习powerbuilder8.0 看哪些书比较好? 200相送,问题简单 一个使用用户空间控制流程的问题,望各位帮忙解答,小弟感谢不尽,在线等待 iis 为啥总出现 "the special module not found"(补充) 菜鸟问题---applet中的Runable方法, 紧急求助 装机:双敏的UKT400N主板性能怎么样?有啥缺点?适合超频吗? 请问vc编制数据库问题:如何读写binary字段 Chinajiji,看过来!多谢惠寄ISO/IEC 14882 请教各位高手用replace函数替换字符串时如何将颜色也变掉 SQL7.0备份的数据库如何在SQL2K中恢复? 如何改变编译出来的.exe文件的名称 谁有这样的矢量图设计系统例程可以参考参考? 谁有AVL树的代码呀。大家来讨论AVL树呀。呵呵 Maya 新手 哪位大侠能提供矢量图设计的例程! 请高人指点这个题目该怎么解决? 打包打包~~~~~什么是打包?? 多文件上传,一个很奇怪的现象! revalidate();怎样用? 怎樣得到系統的所有根目錄(如 C:,D:,E:),及根目錄下的所有子目錄. 求将excel文件导入notes数据库的方法(最好有例子),分不够可以再给! 如何用大拇指目测距离?在《火线追凶》里看到的,没弄懂... 荒漠中生活的骆驼刺,它的根扎的很深,这是对什么环境条件的适应( )我很急啊``````````````` 京瓷复印机8030这款机器怎么样? 如何目测距离我无语. 用一根铁丝,可以围成一个边长为六分米的正方形,如果用这根铁丝围成一个长方形(长和宽都是整分米数),那么有多少种围法?每种违法的面积是多少 有时听到中东地区,亚太地区,这些地区是怎样划分的?地球上还划分有哪些地区?您有划分的图片吗? 求怎么样用手指目测距离?还有很多,就像亮剑里选择特种部队后出的题, 在干旱的沙漠中,骆驼刺地下的根比地上的茎长很多,造成这种现象的主要非生物因素是? 室温25度时,1千克水,水温从室温下降到0度,所需能量是多少?最好提供计算公式 英语自我介绍,不少于200字, 工作中写请假条该怎么写? 建筑电气中NHW-4*150-CT/SC150 谁知道如何目测距离看有些电视上 伸出手臂 利用大拇指目测远处距离,请问谁知道 他是怎么测量的,请懂的朋友指教! 在录制一段音频时,仅提高量化位数将怎么样在录制一段音频时,仅提高量化位数将( )(A)降低该音频的音质,减少存储容量(B)降低该音频的音量,对存储容量不产生影响(C)提升该音频 问一下建筑电气设计中ZR-YJV-4*185+1*95-SC150-FC是什么意思啊?还有Vigi NSE 400N 4P/350 EL ,Vigi 500mA,0. 一个子房里有几个卵细胞? 乐在其中 作文 600字以上 一个球场长50米,宽20米.把它画比例尺是1:500的图纸上,长和宽应该画多长? 六年级自我介绍,女,200~300字,就普通的就行了,不是评什么.jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj急啊!最好现在就要。不要那 关于音频保真度与量化位数的问题某用户要录制一段音频,采用下列采样频率和量化位数,能使该音频保真度最高的是(A)44.1kHz,8bit (B)44.1kHz,16bit(C)44.1kHz,24bit (D)44.1kHz,32bit求详解.知道 一个球场长50米,宽20米,把它画在比例尺是1/500的图纸上,长和宽各画多长? 目测距离把自己的右手伸直并伸出大拇指 与眼睛保持在一条线上 就可以知道自己与前方的距离是多少 假如前面是一堵墙 就可以就可以知道自己与墙的距离是多少 请问这是怎么算出来的? 音频中的量化比特数的含义视频中的量化比特数是决定每个像素颜色的种类但是音频中音色是由频率决定的啊?那量化比特数决定什么? 以《我乐在其中》为题写600字的作文!(最好写关于过年的) 植物子房里面的卵细胞发育成什么 乐在其中作文600字 二次函数配方y=-x2+x+1如何配方? 一根铁丝可以围成一个半径4厘米的圆.如果把这根铁丝重新围成一个正方形,这个正方形的边长是多少厘米? 请假条回家本人请假回家几天写仿请假条 BLOOD-C文人为什么要和小夜打赌 用一根31.4分米的铁丝围成一个正方形,他的边长是多少?如果围成一个圆,这个圆的半径是多少厘米? 想回家请假条怎么写 运动会加油词咋写 ? 有一种细菌繁殖很快,1小时就可以增加1倍有一种细菌繁殖很快1小时就可以增加1倍现在有一批这样的细菌5小时数目变到5分之4万个同样的细菌2小时数目增加到多少万个 请假条的写法奶奶去世 运动会的加油词怎么写 特斯拉Model S到底牛在哪 延字共有几画,第四笔是什么,用音序查字法先查什么 关于勤奋的话题作文 如何算量化分辨率计算机要对声音信号进行处理时,必须将它转换成为数字声音信号.最基本的声音信号数字化方法是取样——量化法.若量化后的每个声音样本用2个字节表示,则量化分辨率是 “戈”下面一个“鸟”怎么念? 哪个洲的国家最多,哪个洲国家最少,哪个州没有国家 请问一般的量化软件都能直接得出什么结果?比如高斯可以直接得出分子电子态的能量值,还可以得出什么? 不计热量损失,将80千克的水从30度加热至90度,需要多少度电?为什么加热到60度和90度的水用的电一样? 在100件产品中,有98件合格品,2件次品,从这100件产品中任意抽取3件,恰好有1件是次品的抽法有多少种?要求有过程.快! 100字左右的英语自我介绍六年级水平 中东是属于哪个州的啊? 在100件产品中,有98件合格品,2件次品,从这100件产品中任意抽取3件恰好有1件是次品的抽法有多少种 一段路程为s,一辆车在通过前2/3s的速度为v1,通过后1/3s的速度为v2,则汽车在全程的平均速度是( ) 二次函数怎么配方 东周的都城是? 第九届全国创新英语大赛怎么翻译 养龟所必备的仪器,什么加温棒什么的? 初三几何圆与三角形AD是ΔABC的角平分线,以D为圆心,AD为半径作⊙D交AB于E,交AC于F,AD=AE=2,BE=1,求AC的长 1:2000的平面图怎么换算,图上距离是15厘米,换算出来是多少米. 加热棒100W一个小时耗电是多少度或者是一天耗电多少度 问三角形是多少,圆形是多少 有一种细菌,每天繁殖1倍,10天繁殖到20000个,繁殖到2500个时是第几天. 什么歇后语形容身在危险中却毫不知情 女同学的力气比男同学小,用数学上可能性的观点回答:是一定还是可能 泰国拟向外国游客征收入境税并提高机场综述:中泰高铁合作前景可期《中国人看白俄罗斯》文集在京首发世界拳王决定参选乌克兰总统 国外长期人社部:养老金双轨制问题会逐步解决 意大利议员:美国监控如拖网捕鱼 一网尼日利亚海盗绑架美船员 西非海域险过美国5岁男童趁保姆睡着把玩其手枪误将日本政府强烈抗议韩国在独岛周边海域举新车牌背着3年前旧违章 杭州车管所:养老金——全球性难题如何破解尼日利亚海盗绑架两美船员 西非海域险意大利议员:美国监控如拖网捕鱼 一网摩洛哥少年网上称要杀死奥巴马 被判入美籍华人歌唱家吴沁将放歌国家大剧院养老金——全球性难题如何破解欧洲大部分国家27日结束夏时制泰国首都曼谷的房产经意大利议员:美国监控如拖网捕鱼 一网欧洲大部分国家27日结束夏时制多国外交官出席水文化论坛 看好中国瓶杨幂李易峰使出“吸粉”招缅甸大赦,155名中国伐木工人获释释延鲁曾是释永信身边红人 普京女儿拜大熊猫吃冰果冻 小羊驼剃“板寸头”东京奥运会会徽陷抄袭丑闻 日本奥组委众安携手阿里云推出云计算保险“林李对决” 一触即发是谁让高分考生们放弃了学医工商:吊销执照三年后名字便可再次使用29名少林弟子:“释正义”是释延鲁郝伟两句话暗示将告别女足 王飞避谈主范冰冰助阵 新华·红星国际广场展示中入夏以来,车辆自燃已近百起上海参保职工 待遇不受影响大中里项目正式命名为“兴业太古汇”老对手韩国放话挑衅 东亚杯国足做好准友邦保险新业务 价值达9.59亿美元“原少林武僧总教头释延鲁背叛师门”“原少林武僧总教头释延鲁背叛师门”上海工会学习班开班 研究推进群团改革中共中央决定给予郭伯雄开除党籍处分
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘