可移动点控件

Delphi的IDE是本身就是一个非常精彩的软件,其中涵含了许多非常宝贵的软件知识。IDE中有一个窗体设计器,控件放在里面,就可以随意移动,以及调整大小,如果能够自己实现一个类似于这样的窗体设计器,那真是一件非常美妙事情。本文实现的就是窗体设计器中最重要的部分,一个移动控件的类,控件要求从TControl继承下来,在介绍如何实现之前,先说说这个类的用法:
 
其中有两个类:
TDragClass就是实现拉动的类
TDragPoint是控件周围出现的拉动点的类
用法很简单:
创建一个TDragClass对象
将要实现拉动的控件传进去就行了
比如:
myDrag.addControl(Edit1);
这样Edit1就能实现拉动和移动了。
另外有两个属性来控制移动的方式
isMoveStep:boolean
指定移动的方式,True为跳跃式,False为连续式,默认情况下是False,即连续式。
所谓跳跃式,即移动或拉动控件时,控件是以离散的方式在改变自己的位置和大小的,这个对窗体设计器中的控件对齐有帮助。而连续式,当然就是以连续的方式使控件的位置和大小得到改变。
MoveStep :integer
当移动方式为跳跃式时,该属性指定跳跃的大小,范围在5-20之间
另外还有一个方法:SetPointVisible(value:Boolean);用于指定移动点的可见性。在Delphi中,当你点击窗口时,控件周围的八个小点就消失了,即用此原理。
 
现在开始进入到具体实现的部分了,当你点击Delphi的窗体设计器中的控件时,控件周围出现了八个小点,这八个小点其实也是窗口类:TGrabHandle。预想中要实现控件移动,得有一个标识你正在移动或拉动的东西,这八个小点正是,Delphi的这种做法可以借鉴。于是我实现了一个移动点类:TDragPoint,该的对象将作为TDragClass的成员之一,具体等一下再讲。现在来看它的实现,其实非常简单,因为VCL给了我们一个有自绘能力的类TCustomControl,只要从这里继承下来,再重载其中的Paint方法,自己来画这个移动点就行了

下载地下址:http://files.cnblogs.com/rogee/uDrag.rar

你可能感兴趣的:(移动)