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

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;

七款Debug工具推荐:iOS开发必备的调试利器 六年亲历,见证中国大数据技术与应用时代的到来 Mailbox:日支撑过亿信息数据库的性能调优及集群迁移 PayPal前CTO 在美国改变世界的乌克兰犹太人 放弃Bootstrap&amp;amp;Foundation,迎接Semantic UI? 一键分享:iOS版Google+发布SDK InMobi杨娟:中国移动游戏如何挑战全球? Adobe再遭APT攻击:数十G源代码及290万用户信息失窃 程序员,如何在工作中崭露头角? 国内外三个不同领域巨头分享的Redis实战经验及使用场景 这是一场潜在的战争:谷歌与Facebook、苹果在搜索上的博弈 设计新闻类网站需要注意的关键点:移动友好、宽带…… 直接开始用:5个免费的在线思维组织工具 招聘开发者常见的九大误区 开源影响销售,维护赞助商? 盘点黑客攻击途径:最常用的7个策略及简单的防护方法 专访AngularJS框架创始人Misko Hevery:让Web开发更便捷 果粉的又一个节日:新iPad或于10月22日发布 新车间李大维:到集装箱里来看创客嘉年华 亚马逊推“登录与支付”功能 直接冲击PayPal Google编程之夏新里程碑:5000万行源代码 8500名学生开发者 非常实用的15款开源PHP类库 Runnable:一站式代码片段服务平台,打造编程界的YouTube 谷歌向所有开发者开放Google App Engine PHP Runtime “沟通”电子表格和矢量图形的“桥梁”:在线可视化工具Raw Facebook北极圈数据中心,Open Compute Project的力作! 最后三天!4折抢购2013移动开发者大会门票 电子书追踪统计,App Annie for eBooks上线 先驱还是模仿者?细数海外移动应用推广平台 IDC:PC出货量下滑终于放缓 联想销量再次第一 为什么说,用一块屏幕玩游戏是远远不够的? NOTES在用久了之后,邮箱会变的巨大,几百MB,但即使我将邮件删除,其邮件文件还是那么大,怎么可以让它缩小? 我为程序中的职工设了一个序号,人数有多少序号就有多少。可以一眼就看出有多少人。可是当我在离职表中删除职工时。序号跟着被删除。删除 关于sql的难题。 请问如何用SQL语句更改一个表的字段长度,其他都不变. jsp读取oracle8.1.6数据表中的中文,读出为?,着急啊。 上个100帖子已结,现在再拿100分求从导入到数据库的代码,各位老大帮忙看看。 怎样用程序设置文件夹共享? VB中,怎样实现C中的continue? 注册表与记录登录密码 更新表中某字段的值 请问如何实现像delphi编辑器那样,当输入了关键字后会变成粗体或其它的颜色? 有人需要Delphi调用水晶报表的例子吗? 关于ADO+SQL Server2000数据库备份的问题! vb.net应用程序! SQL语句问题 有关位图的问题? 如何从扫描仪中读图,欢迎讨论 这个问题难者不会,会者不难! 如何把自制的ActiveX打包成*.cab包放在网页上 ? 关于DeleteTable方法 备份数据库时出现42000错误:"d:\backup\20021115.mdfIO"发生不要恢复错误,backup被中止,救命啊,谢谢!!! An very easy problem! vb.net简单的问题。 怎么用Linux 下的C/C++开发一个窗口,人人有分! delphi7怎么注册? 请问:VB中如何实现Crystal Report打印? VB可以使用MySQL数据库吗? libc stdio中fgets的疑问! 还是文档拷贝问题,原文档中的RTF域怎么拷贝到另一数据库中的新文档中。 请估价开发一个b/s结构的桥牌网站 关于名字空间namespace.散分了!! 文件上传,急!! 初学者问题之数据库连接--有点急 http://CDNA.8q8.net/受到黑客攻击,请发表意见 兄弟们,请问在win2k下,怎么实现在exe文件加上自己的一段代码,给点思路? “好的” 接分! 有关闭包问题,在线求解! 如何在Datagrid中实现交叉表? 我想请问一下,在SQL_SERVER中,可不可以发送URL啊,可以的话怎么写法?谢谢! VB 编程发 Lotus Notes 邮件。(200分) 请问使用sql2000 for jdbc连接sql7的问题 请估价一个bs结构的桥牌游戏网站 IIS以及SSL代理的简单问题!急急急急!来者有分!!! 如何把24和32位图的文件保存为2色位图? 请问一下用winsock怎样绑定两块网卡? 请估价一个bs结构的桥牌游戏网站。 如何在win2000/xp上限制内网用户上网的带宽? 硬盘不知是什么问题! 如何用asp创建exchange用户邮箱地址: 一个人在北京好孤独。 如何知道 DataGrid水平滚动条的位置(值) 怎样描写快乐有趣瞬间的诗句? 左车右并 念什么字 化学配制稀硫酸 误差分析下面是用98%的浓H2SO4(ρ=1.84g/cm3)配制成0.5mol/L的稀H2SO4 500mL的操作,请按要求填空:误差分析:请用“偏高”“偏低”或“无影响”进行填空① 定容时,观察液面俯视 根据意思写出词语,快乐有趣的活动 左“车”右“月”是什么字 化学中0.2N稀硫酸如何配制 我的名字与“唯一”谐音,想找个合适的英文名.与“唯一”谐音,或者有“唯一”的意思的名字 麻烦要x的平方-y的平方+x的三方-y三平方的因式分解.谢谢 英文名的构成英文名往往很长,像 J K 罗林,那些大写字母表示啥意思,还有顺序有什么讲究,希望答案能讲得通俗些,不要粘贴大段文字. 请问这些交通标志各是什么意思? 分解因式X三次+X二次-Y三次-Y方 最正规英文名字我的英文名字叫CHRISTINA 我姓范为什么有的英文名字是类似这样的:Joe.Denis.Fred(乔.丹尼斯.弗瑞德)我也想取类似的PS 为什么Joe.Denis.Fred有2个名字?我也可以有2个吗?比如:Fan.Chr 下面这个交通标志是什么意思 因式分解 x方(x-y)(y-x) 帮我组成个英文名字同上,名字要有内涵,四到五个字符,最好是翻译是励志的,或者组合起来看起来顺眼,是网名,不要人名, 看图写话,求大师帮帮忙,一定有好评,九十个字以上 分解因式(x+y)方+4(x-y)方-4(x方-y方) “有性格的男孩”英文怎么说? 二年级看图写话,最少100个字 导盲犬、导盲犬导盲犬在主人要过马路的时候会这么样、【这么帮助主人的】导盲犬在主人要上楼梯的时候会这么样、有车子的时候会这么样、下车时、导盲犬会这么样、【反正就是导盲犬 把‘我的性格有点像男生’翻译成英语 英语翻译嗯,翻译下《HONEY》,《GIRLS'GENERATION》,《BABY BABY》,《KISSING YOU》的中文意思.因为真的很好听,你们也可以去听听看喔! “导盲犬”是什么意思? 请问品质男人用英文怎么写? 英语翻译不要罗马音译的 导盲犬是什么狗 心理分析小说 英语怎么说? 老师介绍了许多雷锋的事迹.(修改病句) 导盲犬是什么狗呢? 红外/微波双鉴探测器不能布防怎么解决 修改病句:课堂上,老师给我们介绍了许多敦煌壁画的故事. 导盲犬与主人的故事说明了什么道理呢 硫酸铵是常见的一种化肥, from where 和from which的区别 谁能推荐一些经典的英文歌曲?要抒情点的. 什么叫有机化肥,主要成分是什么(化学式) 我借的达州的书是山东版的,遂宁也是吗? 《小英雄雨来》塑造了雨来小英雄的事迹.修改病句 性格弱点的英文怎么讲 如图,英语完形填空 【-2(x-y)的平方】×(y-x)的3方 青蛙的英语简介用英语说的哦!就是介绍青蛙!可以的话在介绍下大象!谢谢! 实践活动课上李老师请张小华到前面讲阿凡提巧斗财主的故事修改病句 y=负(x-1)的平方+3的顶点坐标为 微波探测、红外探测器、热能探测、激光探测、声波探测这些知识都摘给我看看!请说 求文档:改病句:在实践活动课上,老师请李明讲“丑小鸭”的故事.因为李明嗓子有些嘶哑 小学一年级语文看图写话谁帮帮我? 红外探测器属于哪种入侵探测器 我叫做语萱,我想要一个能和我的名字在含义或听起来有联系差不多的英文名.不要太长的英文名,一般就可以了. 帮忙起个R开头的英文名,谐音的,急!我叫罗雨,帮个忙! 用正确的人称代词或物主代词填空Once upon a time there was a girl called Little Red Riding Hood.Together with (she) ___________1 mum,(she) ____________2 lived in a big forest.One fine day,the mother said,“(You) ___________ 3 grandma is 我的名字是彭银妮,想取一个英文名,谐音比较接近我的名字,好听,好记,字母少,含义好,不多见的, 我的名字“徐艳”,想取个谐音的英文名!D开头的也好的!最好是D开头,又谐音!谢啦……不要贴个长篇大论上来!我看多了!有谁能自创一个特别的!因为我英文不是特别好,拼不来 根据汉语提示,用正确的人称代词及物主代词填空!1._____(我)can't find_____(我的)pen.Where is_____(我的)pen?2.Jim can't find_____(他的)bike?____(它)is a black bike.3.DO_____(你)have a bike?What color is( )你的bike?Is( )它b 推荐几首比较抒情英文歌曲类似这首的音乐 一年级语文课本看图说话66页哪座房子最漂亮 为什么说抗日战争的胜利是“我中华民族百年来未有的大事” 哪位朋友推荐一部哲学入门的书籍 用修改符号修改病句,指南针是我国的四大发明 高中语法英语填空题,Professor Smith,along with his assistants,_____ on the project day and night to meet the deadline.答案空中应填 is working 为什么?is working算什么成分?如果是非谓语应该填 working呀.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘