麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

在Delphi7中實(shí)現(xiàn)停靠功能

2019-11-18 18:23:46
字體:
供稿:網(wǎng)友
在Delphi7中實(shí)現(xiàn)??抗δ?/STRONG>
我們?cè)谑褂肈elphi7開發(fā)應(yīng)用系統(tǒng)過程中經(jīng)常需要使用子窗口在主窗口上停靠的功能,如果對(duì)這一部分不熟練時(shí),通常會(huì)到CSDN等網(wǎng)站尋找各種相關(guān)的控件,或者參考Delphi自帶的例程Docking,下面我給大家介紹一種能夠湊乎用的簡便方法。
1、在主窗口中添加四個(gè)Panel和四個(gè)Splitter,設(shè)置對(duì)齊上下左右四邊。
2、設(shè)定四個(gè)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響應(yīng)事件代碼相同。
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;

上下兩個(gè)Panel響應(yīng)事件代碼相同。
5、創(chuàng)建新的窗體用于??康街鞔绑w。
6、設(shè)置新窗體DragKind為dkDock,DragMode為dmAutomatic。
7、在新窗體OnClose事件中添加如下代碼:
  if self.HostDockSite <> nil then
  begin
    self.ManualDock(nil);
  end;
  Action := caHide;
8、設(shè)置新窗體不自動(dòng)創(chuàng)建。
9、在主創(chuàng)體中創(chuàng)建新窗體并顯示。記?。河肧how,不要用ShowModal。
這種方法是一個(gè)不很規(guī)范的方法,如果需要更細(xì)致的控制,最好參考Delphi的Docking示例。如果將此例中的某個(gè)Panel更改為TabControl或者PageConrol,你可以得到更好的效果,不過代碼需要稍微變化,有興趣的哥們可以試試。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 亚洲欧美日韩久久精品第一区 | 色人阁在线视频 | 久久久久久久久久久亚洲 | 亚洲精品午夜在线 | 精精国产xxxx视频在线播放7 | 毛片网站视频 | 九九热精品免费视频 | 久久国产一二三 | 色婷婷久久久 | 成人免费网站在线观看视频 | 美女扒开腿让男生桶爽网站 | chinese乱子伦xxxx国语对白 | 综合国产一区 | 久久免费观看一级毛片 | 中文国产在线视频 | 777sesese| 亚洲国产精品久久久久久久久 | 国产亚洲欧美在线视频 | 久久艹艹艹 | 看片一区 | 高清一区二区在线观看 | a网在线 | 在线a亚洲视频播放在线观看 | 亚洲综合91 | 国产一区毛片 | 91短视频在线 | 欧美性生活区 | 久草最新 | 在线观看免费av网 | xxxxxx打针视频vk | 国产九九热视频 | 九九热视频在线免费观看 | 国产午夜免费福利 | 欧美国产免费 | 成人三级视频在线观看 | 久久久久久久久久久一区 | www.777含羞草| 毛片视频网站在线观看 | 国产成人高清成人av片在线看 | 欧美成人三级视频 | 羞羞视频一区二区 |