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

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;

控制PC喇叭 -VB资料 利用VB测声卡 利用VB进行多媒体程序设计初步 利用Visual Basic设计多媒体应用程序 满屏播放AVI文件-VB资料 平铺贴图背景 -VB资料 破解WINDOWS屏幕保护密码 -VB资料 巧用VB编程使XMPLAYER自动播放VCD VB取得 WAV 文件信息 趣味撞球VB5应用程序一例 VB如何从&quot;SOUND.DRV&quot;中提取声音 VB如何设定墙纸的显示方式? VB如何用API及MMSYSTEM.DLL播放AVI文件 VB如何知道计算机是否安装声卡? 设计简单的屏幕保护程序 -VB资料 使机箱内的小喇叭发出不同的声音 -VB资料 使用VB设计具有「动感」的命令图标栏 五彩缤纷的清屏效果-VB资料 系统是否支持声音 -VB资料 一个实用的VB屏幕程序 一个自动更换墙纸的小软件-VB资料 VB用 VB 设 计 VCD 播 放 器 VB用API播放 .wav 声音文件 VB用MCI指令进行多媒体编程 用VB5.0编写自己的MP3播放器 用VB6.0编写电脑抽奖程序 用VB6的双通道技术获得影碟片断 用VBScript制作活动主页 用VB编写DirectX7.0游戏(下) 用VB编写FLASH动画播放器 用VB设计VCD播放器 哪位兄弟教教我,如果实现自适应静音检测? 一个B-S结构的售楼软件的报价大致应该是多少? 我的确是做了错事,我决心去努力,但似乎力不从心? 100分 求《UML与Rational Rose从入门到精通》 急!各位高手关于要把多个DC放到一个pDC上显示的问题。 急。关于ppc和sybase的问题 请问编一个WINDOWS画笔 谁有c434009A主板的驱动程序。 请问在windows下如何实现像数据库一样的读、写锁? 为啥我在InstallShield中调用DLL中的函数总是出错呢? 如何能在HTML控件显示区域显示“....(指定的文件名)不存在”? 请问如何把TIF格式转换成JPG或GIF的格式?? 代理不能定时执行,请指教,谢谢。 怎样与外部数据库建立联合查询? 如何接受来自vbscript的字符数据列表 怎么在Gtk+的gnomemessagebox显示中文? (在线等待,急!)在vc中怎么使用datagrid控件 我使用的是odbc访问数据库 好急的问题,有关于SMS的接收字符处理问题,想了好几天没有结果 那位兄弟手头上有ASP.NET高级编程的电子书? DataGrid 控件问题,帮帮我把,朋友! automount? 一个比较难的问题! 关于datagrid的问题 在线等待 在cmd编辑器中用java运行已编译的文件运行不成功怎样解决 各位帮我解决一下这个问题!!!谢谢 关于ResourceManager的疑惑? 两台机器无法访问? 大家有没有听说过zebudom.js这个javascript的API?请问哪里可以下载它? 模块的连接 如何用php开发一个在线语音聊天室? 请问:有谁能提供Microsoft Project 2002简体中文专业版下载地址????急用!!!!!! 《The C++ Programming Language》有没有中译版? 请高手帮我看看: session的范围 硬件加、解密卡合作 请问那里能下到C或者C++的编译环境? 我的网页做好了,在我自己的机子上显示的很好看,在别的机子上有的显示的和在我的机子上显示的一样,很不错,但在有些机子上显示就变形了 怎样在文件中查找指定的字串? 为什么这两个查询都不能运行呢? 请教有关比对数据库的思路 运行结果出错!!!!!!!!!! google主页的问题(在线) (在线等待,急!)对话框中画图,超过了对话框大小,但是滚动条不能用 jbuilder7+jboss的配置问题? 求教:用UML做分析设计工具、用JAVA开发的一个办公管理系统的详细时间节点计划书。 數據庫數據顯示問題///急,在線等!!!!!個位幫幫忙? 讨论一下,eregi和strpos 为什么这两个查询都不能运行呢? 集成多文件夹操作窗口的软件有吗?有的请发QQ;6138215 怎么获得checkbox组中被选中的部分? 物理的实验报告 解一元一次方程时,一般要怎样把方程化成一般形式? 吃一垫,真能长一智吗 小孔成像是孔越大越好吗?拜托各位大神 问一下仿一本男孩子必读的书写钢铁是怎样炼成的读后感有熟悉这个的吗?不好意思,麻烦各位{随机数K 吃一埑,长一智.的教育意义是什么? 河南博物院的简介以一个导游身份讲解. 麻烦看下仿一本男孩子必读的书写钢铁是怎样炼成的读后感有人了解的说下吧, 吃一垫,长一智. 外电极是什么意思呢? 一些唯美的句子 “三下乡”社会实践是哪一年开始的 国内和国外的臭氧发生器电极片(管式和板式)哪家最好?各家的优势是什么?国内用哪家的电极片比较多?我++++++++++分!) 根据句意,在括号里填上与“站立”意思相近的词.(不可重复)1 如今,一座座海洋石油平台已( )在海涛之中.2 月球上只能看到广袤的荒原上高山( ),巨石嶙峋.3 社会主义的中国像巨人一 英语翻译要写在简历里的 务必要准确 青苹果表皮的锈斑是什么?现在买的青苹果,表皮有很多褐色的锈斑,是什么东西?跟虫粉什么的有关系吗? 台风暴跳如雷,像头疯狂的巨兽,呼呼地向着城市扑去,用了什么修辞手法?急 我要名人求学的例子,或有关于求学的名言.急, 英语“赶上时代的步伐”最地道怎么说,书面语 他暴跳如雷,像___________.(比喻句) 是吃一堑,长一智,还是吃一蜇,长一智呢?麻烦知道的回答一下. 翻译:我们今天刚上班(书面语) 台风为什么暴跳如雷?急, 英语翻译Courage is the ladder on which all the other virtues mount.还有这句Despite all the life danger,with one selfless act from one common person,someone is saved,A hero is made. 英语翻译(他)能在短时间内掌握了工作要点和技巧,能够熟练使用TRS.有道翻译结果为In a short time grasp the working points and skills,Can skilled use TRS 《故乡的桂花雨》的主题是什么? culture smart or science intelligent原创文章!明天就要用! 有什么果实上有翅膀啊?什么果实上会长有翅膀? 我能行 主题班会的回答内容,尽量多.(中学生) 真情树 读后感 移动标点符号,改变句意:哥哥说:我是好青年. 什么样的女人最讨人喜欢拜托各位了 3Q 斯大林信基督吗?俄国人不都是信天主教么,但他(斯大林)是共产主义者,是不是无神论?请懂的回答 河南博物院怎么样 鸽子蛋书面语叫什么? 有人看过如果树知道么,有什么感想 于丹《论语心得》读后感1000字太急了! 他( )节省下自己的零花钱,( )靠帮邻居干活来凑足这笔钱》填什么关联词 "蛰"这个字用拼音怎么打? 拼搏辩论关于人生要拼搏的论据,辩论赛用,最好是反面的,(即人生不一定要每时每刻都拼搏,要适时行乐,或根本不要拼搏)~多多益善! 关于可以体现自己科学精神的作文,不少于500字 1.快车和慢车同时从A\B两地相向而行,3小时向隅后两车按原速继续前进,快车形式2小时到达B地,这时慢车距离A地还有110千米.求A\B两地相距多少千米?2.有一块铜与锌的合金,其中铜与锌的比是2:3, 钢铁是怎样炼成的读后感第二段怎么写 现在问道怎么升级快?现在问道怎么升级快? .....(要用比例等式来计算...):只选最好的答案..1.师徒两人合做了84个零件,师傅5分钟做一个,徒弟9分钟做一个,要求在相同的时间完成,每人应该分配到多少个零件?2.走同一段路,小玲要12分,小丽 于丹《论语》心得和《庄子》心得哪本经典? 夏衍为什么要赞颂小草的力量?这是课文上的一道题,马上要讲了,希望学过的,在下感激不尽! 上上月书面语怎么说 用刀在苹果上划一刀是大破坏了苹果的什么组织 什么字站着和躺着变成不同的两个字?比如:“田、口、回”这些字站着和躺着念都是一样的,但哪两个字站着和躺着念是不同的呢? 吃一欠长一智什么意思? 苹果烂掉了,只要把烂掉的部分削掉再吃就可以了吗?讲出道理 这可是当时什么(填关于轰的词语)的新闻 吃一寸 长一智什么意思 苹果表面是好好的,但里面已经发黑烂掉了,为什么?是不是因为防腐剂的添加,还是病虫害的原因?外表没什么异常,还是硬的. 这可是当时很什么(填关于轰的词语)的新闻 请教下仿一本男孩子必读的书写钢铁是怎样炼成的读后感J我想知道到,我在此先谢谢大伙了7dX 苹果会从里面烂掉吗?什么原因导致的什么人为原因导致的? 请问含义是“少”的汉字有哪些,包括古代 人为什么要吃一垫才会长一智?不是有句古话;"吃一垫.长一智"人为什么要吃一次亏才会长一智呢?###不吃亏就长不了智了吗?$$$有时的一次亏会让你损失很多!我就以这为例:我在盛大以保中被骗 王晨会见日本日中友协代表团韩国要求日本删除主张独岛主权视频亚太地区主要股市多数下跌浙江再增1例人感染H7N9禽流感病例杭州“越野哥”当街救人勇退三劫匪 民中国确认544种外来生物入侵 已成最狗追捕兔子摔断腿 滞留高山上三周奇迹加拿大卡尔加里市长胜选连任 笃信伊斯韩国政府敦促日方删除主张争议岛屿主权世界主要城市10月24日天气预报浙江丽水文化精品展亮相天津 市民可动中国卫星“驰援”澳大利亚林火救灾北京大学新闻发言人就不续聘夏业良一事西安东郊一建筑发生爆炸 消防已赶赴现北京住建委发布“京7条” 自住型商品西安东郊一建筑爆炸 楼体部分坍塌消防国际社会探讨建立南极海洋生态保护区中方对苏丹总统访问南苏丹并达成多项共全球海洋工程产业呈现向中国转移趋势新华国际时评:美国还能相信谁秘鲁举办第25届欧洲电影节广府文化节9场好戏等你睇珠海困难职工子女可申请千元关爱金招远血案开庭 仅两被告认罪雷克萨斯9月起下调零部件价格车载付费服务东莞遇冷蓬江区经济指标居全市前列一起命案牵出特大传销团伙廉政口袋书嘴唇上的画众诚保险开展“7·8全国保险公众宣传兰州:19岁小伙网吧“蹭网” 四少年怕影响自己生意 兰州一餐馆老板疑纠众顺德:男子欠25元偷手机抵债兰州一孕妇割腕自杀被救 腹中胎儿不幸甘肃一公司老总借款1480万购六合彩交行上半年业绩增幅创近年新低国奥男足小组赛避开日韩他们是谁冰桶挑战被炮轰 浪费水!丈夫退休后妻子更沮丧最后组团限量首发
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘