知识大全 如何制作可随处拖放的工具栏

Posted

篇首语:真者,精诚之至也,不精不诚,不能动人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 如何制作可随处拖放的工具栏相关的知识,希望对你有一定的参考价值。

  在我们经常使用的软件 比如photoshop office delphi等等 我们经常可以对工具栏进行拖拽操作 将相关的工具栏拖拉出来 形成独立的小窗口 或者将几个工具栏进行互相的组合!(这些就是我们常说的DOCK功能)

  其实 利用DELPHI或是其它的可视化编程工具(如c++ builder等)很容易实现上面的功能!下面 我们通过一个小例子来看看它是如何实现的 这里使用的编程工具为Delphi!

  开始实例前 先要说明些东东!(讲些废话先^_^)

  可视化的VCL元件皆支持DOCK功能!

  在delphi中 所有继承自Tcontrol及inControl的VCL元件 都支持dock功能

  基本上 要进行dock动作至少需要两个元件 一个是被附着的dock site元件 另一个是附着在dock site的元件 DELPHI所提供的可视化元件中只有继承自inControl的VCL元件才具有dock site的功能 而只要是继承自Tcontrol的VCL元件则都具有附着在dock site的功能

  * 如果你希望某个继承自inControl的元件具有dock site的功能 只要把该元件的属性DockSite设成true即可   * 若是要把某个继承自TControl的元件附着在dock site上 只要把属性Drag kind设成dkDock 属性DragMode设成dmAutomatic即可

  当程序执行后 你就可以利用鼠标把后者元件拖拉到前者元件上 进行dock动作 至于dock的实际动作都被封装在元件内 用户根本不用管这些动作是如何进行的

  马上开始我们的实例!

  新建一个普通的工程(project ) 从win 控件页中拖拉一个CoolBar 一个ToolBar 一个ImageList到form 窗体中 属性设置如下

Form    Caption: 实例一DOCK功能的实现   CoolBar (被附着的dock site元件)    AutoSize: true;    DockSite: true; 

  为了一些更好的效果 你可以对BorderWidth EdgeBorders EdgeInner EdgeOuter 进行相关的设置!

  ToolBar (附着在dock site的元件)

  在ToolBar 元件上点击右键 选择New Button 新建一些按钮 它们之间可以通过New Separator 进行相关组的分隔!

  Caption:  工具栏(独立出来时窗口显示的标题)

  AutoSize: true

  DockKind: dkDock

  DragMode: dmAutomatic

  Flat:  ture (这样好看些)

  Images: ImageList  

  同样为了一些更好的效果 你可以对BorderWidth EdgeBorders EdgeInner EdgeOuter 进行相关的设置!

  ImageList 双击该控件 选择Add… 添加几幅图片 这样 可以很方便地将这些图片赋于ToolBar中的Button!

  点击运行按钮 你拖拽下你的工具栏 是不是马上就可以看到效果啦?我们还没有编写一行代码呢????这就是Delphi的强大之处!

  为了更好地进行拖拽操作 我们添加下面几行代码!(主要是CoolBar 的onDragOver onDockDrop和UnDock事件)

unit sample ;

interface

usesWindows Messages SysUtils Classes Graphics Controls Forms Dialogs ImgList ComCtrls ToolWin;

typeTForm = class(TForm)ImageList : TImageList;CoolBar : TCoolBar;ToolBar : TToolBar;ToolButton : TToolButton;ToolButton : TToolButton;ToolButton : TToolButton;ToolButton : TToolButton;ToolButton : TToolButton;ToolButton : TToolButton;ToolButton : TToolButton;procedure CoolBar DragOver(Sender Source: TObject; X Y: Integer;State: TDragState; var Accept: Boolean);procedure CoolBar DockDrop(Sender: TObject; Source: TDragDockObject; X Y: Integer);procedure CoolBar UnDock(Sender: TObject; Client: TControl;NewTarget: inControl; var Allow: Boolean);procedure ToolButton Click(Sender: TObject);private Private declarations public Public declarations end;

varForm : TForm ;

implementation

$R * DFM

procedure TForm CoolBar DragOver(Sender Source: TObject; X Y: Integer;State: TDragState; var Accept: Boolean);beginAccept:=(source=ToolBar ); //指定接受拖拽操作的条件是拖拽对象为ToolBar ;end;

procedure TForm CoolBar DockDrop(Sender: TObject; Source: TDragDockObject;X Y: Integer);beginToolBar AutoSize:=false; //当元件拖到dock site元件上面 并且放开鼠标左键之后 此事件就会被执行ToolBar Align:=altop; //为了便于拖拽 将toolbar 的宽度与coolbar 相近 ToolBar Width:=CoolBar Width ;end;

procedure TForm CoolBar UnDock(Sender: TObject; Client: TControl;NewTarget: inControl; var Allow: Boolean);beginToolBar AutoSize:=true; //当元件一拖离dock site元件时 此事就会被执行ToolBar Caption:= 工具栏 ; //设定独立工具栏窗口的大小和标题end;

procedure TForm ToolButton Click(Sender: TObject);beginClose; //退出程序end;

end

  下面列出与DOCK功能有关的事件

  OnDragDrop: 当元件被拖动时 此事件被执行

  OnDragOver: 用于指定元件可以被拖动的条件

  OnDockDrop: 当元件拖到dock site元件上面 并且放开鼠标左键之后 此事件就会被执行

  OnDockOver 当元件一拖到dock site元件上 此事件就会被执行

  OnUnDock 当元件一拖离dock site元件时 此事就会被执行

  OnGetSiteInfo 取得dock site元件的一些信息

cha138/Article/program/Delphi/201311/25011

相关参考

知识大全 C#中的拖放操作

C#中的拖放操作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  随着桌面系统的推出利用鼠标的拖放

知识大全 用VB实现拖放功能

用VB实现拖放功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  拖放是用鼠标拖动一个文件到其它

知识大全 Delphi拖放编程[2]

DELPHI基础教程:Delphi拖放编程[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Delphi拖放编程[1]

DELPHI基础教程:Delphi拖放编程[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Delphi拖放编程[4]

DELPHI基础教程:Delphi拖放编程[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Delphi拖放编程[3]

DELPHI基础教程:Delphi拖放编程[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

交通工具 舟的出现

  在江河湖海上随处可见万吨巨轮的今天,木筏、独木舟几乎绝迹,很多人只是在电视、电影里见过。其实,在亚马逊流域的森林里,在南太平洋的一些岛国的沼泽地带,人们并没有抛弃独木舟和木筏,因为在河道纵横、大船

知识大全 C#拖放技术的典型应用

C#拖放技术的典型应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在应用程序中有时用户希望将

知识大全 Java拖放文件到Swing窗口

Java拖放文件到Swing窗口  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  经过测试是没有问

知识大全 用大白菜制作的U盘启动盘,里面有分区工具吗

用大白菜制作的U盘启动盘,里面有分区工具吗?  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!用大白菜制