国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Delphi > 正文

在Delphi7中實現??抗δ?/h1>
2019-11-18 18:23:46
字體:
來源:轉載
供稿:網友
在Delphi7中實現??抗δ?/STRONG>
我們在使用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、創建新的窗體用于??康街鞔绑w。
6、設置新窗體DragKind為dkDock,DragMode為dmAutomatic。
7、在新窗體OnClose事件中添加如下代碼:
  if self.HostDockSite <> nil then
  begin
    self.ManualDock(nil);
  end;
  Action := caHide;
8、設置新窗體不自動創建。
9、在主創體中創建新窗體并顯示。記?。河肧how,不要用ShowModal。
這種方法是一個不很規范的方法,如果需要更細致的控制,最好參考Delphi的Docking示例。如果將此例中的某個Panel更改為TabControl或者PageConrol,你可以得到更好的效果,不過代碼需要稍微變化,有興趣的哥們可以試試。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 灵山县| 博爱县| 苏尼特右旗| 永登县| 武穴市| 都昌县| 四会市| 宣武区| 定结县| 潢川县| 德保县| 南皮县| 正蓝旗| 平顺县| 松阳县| 宁蒗| 汉阴县| 庆安县| 平罗县| 旺苍县| 万荣县| 菏泽市| 湘西| 襄垣县| 遵化市| 靖安县| 云安县| 九龙县| 色达县| 远安县| 隆安县| 将乐县| 霍城县| 宜宾县| 芦溪县| 岗巴县| 博白县| 竹山县| 抚松县| 东山县| 卢湾区|