程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在Delphi7中實現停靠功能

在Delphi7中實現停靠功能

編輯:Delphi
在Delphi7中實現停靠功能 我們在使用Delphi7開發應用系統過程中經常需要使用子窗口在主窗口上停靠的功能,如果對這一部分不熟練時,通常會到CSDN等網站尋找各種相關的控件,或者參考Delphi自帶的例程Docking,下面我給大家介紹一種能夠湊乎用的簡便方法。 1、在主窗口中添加四個Panel和四個Splitter,設置對齊上下左右四邊。
  2、設定四個Panel的屬性DockSite屬性為True。
  3、左右Panel添加 OnDockDrop、OnDockOver、OnUnDock事件如下:
  procedure TfrmMain.pnlLeftUnDock(Sender: TObject; ClIEnt: TControl;
  NewTarget: TWinControl; var Allow: Boolean);
  begin
    if (Sender as TPanel).VisibleDockClIEntCount = 1 then
    begin
      (Sender as TPanel).Width := 1;
    end;
  end;   procedure TfrmMain.pnlLeftDockDrop(Sender: TObject;
    Source: TDragDockObject; X, Y: Integer);
  begin
    (Sender as TPanel).Width := max(source.Control.UndockWidth,(Sender as TPanel).Width);
  end;   procedure TfrmMain.pnlLeftDockOver(Sender: TObject;
    Source: TDragDockObject; X, Y: Integer; State: TDragState;
    var Accept: Boolean);
  begin
    if State = dsDragEnter then
    begin
      (Sender as TPanel).Width := max(Source.Control.UndockWidth, (Sender as TPanel).Width);
    end
    else
    begin
  
    if State = dsDragLeave then
      begin
        (Sender as TPanel).Width := 1;
      end;
    end;
  end;

  左右Panel響應事件代碼相同。 4、上下Panel添加 OnDockDrop、OnDockOver、OnUnDock事件如下:
  procedure TfrmMain.pnlBottomUnDock(Sender: TObject; ClIEnt: TControl;
    NewTarget: TWinControl; var Allow: Boolean);
  begin
    if (Sender as TPanel).DockClIEntCount = 1 then
    begin
      (Sender as TPanel).Height := 1;
    end;
  end;
  procedure TfrmMain.pnlBottomDockDrop(Sender: TObject;
    Source: TDragDockObject; X, Y: Integer);
  begin
    (Sender as TPanel).Height := max(source.Control.UndockHeight,(Sender as TPanel).Height);
  end;   procedure TfrmMain.pnlBottomDockOver(Sender: TObject;
    Source: TDragDockObject; X, Y: Integer; State: TDragState;
    var Accept: Boolean);
  begin
    if State = dsDragEnter then
    begin
      (Sender as TPanel).Height := max(Source.Control.UndockHeight, (Sender as TPanel).Height);
    end
    else
    begin

      if State = dsDragLeave then
      begin
        (Sender as TPanel).Height := 1;
      end;
    end;
  end;

  上下兩個Panel響應事件代碼相同。 5、創建新的窗體用於停靠到主窗體。
  6、設置新窗體DragKind為dkDock,DragMode為dmAutomatic。
  7、在新窗體OnClose事件中添加如下代碼:
    if self.HostDockSite <> nil then
    begin
      self.ManualDock(nil);
    end;
    Action := caHide;
  8、設置新窗體不自動創建。
  9、在主創體中創建新窗體並顯示。記住:用Show,不要用ShowModal。 這種方法是一個不很規范的方法,如果需要更細致的控制,最好參考Delphi的Docking示例。如果將此例中的某個Panel更改為TabControl或者PageConrol,你可以得到更好的效果,不過代碼需要稍微變化,有興趣的哥們可以試試。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved