程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> delphi實例編程之--制作可隨處拖放的工具欄

delphi實例編程之--制作可隨處拖放的工具欄

編輯:Delphi
在我們經常使用的軟件,比如Photoshop,Office,Delphi等等,我們經常可以對工具欄進行拖拽操作----將相關的工具欄拖拉出來,形成獨立的小窗口;或者將幾個工具欄進行互相的組合!(這些就是我們常說的DOCK功能),效果如下圖:



Delphi的工具欄

  其實,利用DELPHI或是其它的可視化編程工具(如c++ builder等)很容易實現上面的功能!下面,我們通過一個小例子來看看它是如何實現的,這裡使用的編程工具為Delphi!

  開始實例前,先要說明些東東!(講些廢話先^_^)

  可視化的VCL元件皆支持DOCK功能!
  在Delphi中,所有繼承自Tcontrol及TWinControl的VCL元件,都支持dock功能。

  基本上,要進行dock動作至少需要兩個元件,一個是被附著的dock site元件,另一個是附著在dock site的元件。Delphi所提供的可視化元件中只有繼承自TWinControl的VCL元件才具有dock site的功能,而只要是繼承自Tcontrol的VCL元件則都具有附著在dock site的功能。

  * 如果你希望某個繼承自TWinControl的元件具有dock site的功能,只要把該元件的屬性DockSite設成true即可;
  * 若是要把某個繼承自TControl的元件附著在dock site上,只要把屬性Drag kind設成dkDock、屬性DragMode設成dmAutomatic即可,

  當程序執行後,你就可以利用鼠標把後者元件拖拉到前者元件上,進行dock動作。至於dock的實際動作都被封裝在元件內,用戶根本不用管這些動作是如何進行的。


馬上開始我們的實例!

  新建一個普通的工程(project1),從win32控件頁中拖拉一個CoolBar,一個ToolBar,一個ImageList到form1窗體中,屬性設置如下:

Form1

 .Caption: 實例一DOCK功能的實現;

CoolBar1(被附著的dock site元件)

 .AutoSize: true;
 .DockSite: true; 
為了一些更好的效果,你可以對BorderWidth,EdgeBorders,EdgeInner, EdgeOuter,進行相關的設置!


ToolBar1(附著在dock site的元件)
在ToolBar1元件上點擊右鍵,選擇New Button,新建一些按鈕,它們之間可以通過New Separator,進行相關組的分隔!

 .Caption:  工具欄(獨立出來時窗口顯示的標題)
 .AutoSize: true;
 .DockKind: dkDock;
 .DragMode: dmAutomatic;
 .Flat:  ture;(這樣好看些)
 .Images: ImageList1;  
同樣為了一些更好的效果,你可以對BorderWidth,EdgeBorders,EdgeInner, EdgeOuter,進行相關的設置!

ImageList1,
雙擊該控件,選擇Add…,添加幾幅圖片。這樣,可以很方便地將這些圖片賦於ToolBar中的Button!



  點擊運行按鈕,你拖拽下你的工具欄,是不是馬上就可以看到效果啦?我們還沒有編寫一行代碼呢????這就是Delphi的強大之處!

為了更好地進行拖拽操作,我們添加下面幾行代碼!(主要是CoolBar1的onDragOver、onDockDrop和UnDock事件);源程序如下(很短,不要以為我偷懶)!(打包下載源文件與執行程序)

unit sample1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ImgList, ComCtrls, ToolWin;

type
TForm1 = class(TForm)
ImageList1: TImageList;
CoolBar1: TCoolBar;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
procedure CoolBar1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure CoolBar1DockDrop(Sender: TObject; Source: TDragDockObject; X,
Y: Integer);
procedure CoolBar1UnDock(Sender: TObject; ClIEnt: TControl;
NewTarget: TWinControl; var Allow: Boolean);
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved