DockForm.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:3k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit DockForm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   StdCtrls, ExtCtrls, Menus;
  6. type
  7.   TForm1 = class(TForm)
  8.     Panel1: TPanel;
  9.     Panel2: TPanel;
  10.     Button2: TButton;
  11.     Button3: TButton;
  12.     Memo1: TMemo;
  13.     Splitter1: TSplitter;
  14.     PopupMenu1: TPopupMenu;
  15.     DocktoPanel1: TMenuItem;
  16.     DocktoForm1: TMenuItem;
  17.     Floating1: TMenuItem;
  18.     Splitter2: TSplitter;
  19.     ListBox1: TListBox;
  20.     procedure FormCreate(Sender: TObject);
  21.     procedure Panel1DockDrop(Sender: TObject; Source: TDragDockObject; X,
  22.       Y: Integer);
  23.     procedure ControlStartDock(Sender: TObject;
  24.       var DragObject: TDragDockObject);
  25.     procedure Panel1DockOver(Sender: TObject; Source: TDragDockObject; X,
  26.       Y: Integer; State: TDragState; var Accept: Boolean);
  27.     procedure DocktoPanel1Click(Sender: TObject);
  28.     procedure DocktoForm1Click(Sender: TObject);
  29.     procedure Floating1Click(Sender: TObject);
  30.     procedure FormDestroy(Sender: TObject);
  31.   private
  32.     DockFileName: string;
  33.   public
  34.     { Public declarations }
  35.   end;
  36. var
  37.   Form1: TForm1;
  38. implementation
  39. uses
  40.   DockHost;
  41. {$R *.DFM}
  42. procedure TForm1.FormCreate(Sender: TObject);
  43. var
  44.   FileStr: TFileStream;
  45. begin
  46.   // Panel1.DockOrientation := doHorizontal;
  47.   Memo1.FloatingDockSiteClass := TForm2;
  48.   ListBox1.FloatingDockSiteClass := TCustomDockForm;
  49.   // relaod the settings
  50.   DockFileName := ExtractFilePath (Application.Exename) +
  51.     'dock.dck';
  52.   if FileExists (DockFileName) then
  53.   begin
  54.     FileStr := TFileStream.Create (DockFileName, fmOpenRead);
  55.     try
  56.       Panel1.DockManager.LoadFromStream (FileStr);
  57.     finally
  58.       FileStr.Free;
  59.     end;
  60.   end;
  61.   Panel1.DockManager.ResetBounds (True);
  62. end;
  63. procedure TForm1.Panel1DockDrop(Sender: TObject; Source: TDragDockObject;
  64.   X, Y: Integer);
  65. begin
  66.   Caption := 'Docked: ' + IntToStr (Panel1.DockClientCount);
  67. end;
  68. procedure TForm1.ControlStartDock(Sender: TObject;
  69.   var DragObject: TDragDockObject);
  70. begin
  71.   Caption := 'Docking ' + (Sender as TComponent).Name;
  72. end;
  73. procedure TForm1.Panel1DockOver(Sender: TObject; Source: TDragDockObject;
  74.   X, Y: Integer; State: TDragState; var Accept: Boolean);
  75. begin
  76.   Caption := 'Docking: ' + Source.Control.Name;
  77.   Accept := True;
  78. end;
  79. procedure TForm1.DocktoPanel1Click(Sender: TObject);
  80. begin
  81.   // dock to the panel
  82.   ListBox1.ManualDock (Panel1, Panel1, alBottom);
  83. end;
  84. procedure TForm1.DocktoForm1Click(Sender: TObject);
  85. begin
  86.   // dock to the current form
  87.   ListBox1.Dock (Self, Rect (200, 100, 100, 100));
  88. end;
  89. procedure TForm1.Floating1Click(Sender: TObject);
  90. begin
  91.   // toggle the floating status
  92.   if ListBox1.Floating then
  93.     ListBox1.ManualDock (Panel1, Panel1, alBottom)
  94.   else
  95.     ListBox1.ManualFloat (Rect (100, 100, 200, 300));
  96.   Floating1.Checked := ListBox1.Floating;
  97. end;
  98. procedure TForm1.FormDestroy(Sender: TObject);
  99. var
  100.   FileStr: TFileStream;
  101. begin
  102.   if Panel1.DockClientCount > 0 then
  103.   begin
  104.     FileStr := TFileStream.Create (DockFileName,
  105.       fmCreate or fmOpenWrite);
  106.     try
  107.       Panel1.DockManager.SaveToStream (FileStr);
  108.     finally
  109.       FileStr.Free;
  110.     end;
  111.   end
  112.   else
  113.     // remove the file
  114.     DeleteFile (DockFileName);
  115. end;
  116. end.