uMain.pas
上传用户:lmk588
上传日期:2013-04-16
资源大小:5120k
文件大小:9k
源码类别:

按钮控件

开发平台:

Delphi

  1. unit uMain;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   Menus, StdCtrls, ComCtrls, ActnList, ToolWin, ExtCtrls, uDockForm,
  6.   WinSkinData;
  7. type
  8.   TMainForm = class(TForm)
  9.     ActionList1: TActionList;
  10.     ViewToolBar1: TAction;
  11.     ViewToolBar2: TAction;
  12.     LeftDockPanel: TPanel;
  13.     BottomDockPanel: TPanel;
  14.     ViewWhiteWindow: TAction;
  15.     ExitAction: TAction;
  16.     ViewBlueWindow: TAction;
  17.     ViewGreenWindow: TAction;
  18.     ViewRedWindow: TAction;
  19.     ViewTealWindow: TAction;
  20.     ViewPurpleWindow: TAction;
  21.     ViewLimeWindow: TAction;
  22.     SkinData1: TSkinData;
  23.     Button1: TButton;
  24.     Button2: TButton;
  25.     VSplitter: TSplitter;
  26.     Memo1: TMemo;
  27.     procedure FormCreate(Sender: TObject);
  28.     procedure CoolBar1DockOver(Sender: TObject; Source: TDragDockObject; X,
  29.       Y: Integer; State: TDragState; var Accept: Boolean);
  30.     procedure ViewToolBar1Execute(Sender: TObject);
  31.     procedure ViewToolBar2Execute(Sender: TObject);
  32.     procedure Exit1Click(Sender: TObject);
  33.     procedure LeftDockPanelDockDrop(Sender: TObject;
  34.       Source: TDragDockObject; X, Y: Integer);
  35.     procedure LeftDockPanelDockOver(Sender: TObject;
  36.       Source: TDragDockObject; X, Y: Integer; State: TDragState;
  37.       var Accept: Boolean);
  38.     procedure BottomDockPanelDockOver(Sender: TObject;
  39.       Source: TDragDockObject; X, Y: Integer; State: TDragState;
  40.       var Accept: Boolean);
  41.     procedure LeftDockPanelUnDock(Sender: TObject; Client: TControl;
  42.       NewTarget: TWinControl; var Allow: Boolean);
  43.     procedure ExitActionExecute(Sender: TObject);
  44.     procedure ViewWhiteWindowExecute(Sender: TObject);
  45.     procedure LeftDockPanelGetSiteInfo(Sender: TObject;
  46.       DockClient: TControl; var InfluenceRect: TRect; MousePos: TPoint;
  47.       var CanDock: Boolean);
  48.     procedure Button1Click(Sender: TObject);
  49.   private
  50.     procedure CreateDockableWindows;
  51.   public
  52.     procedure ShowDockPanel(APanel: TPanel; MakeVisible: Boolean; Client: TControl);
  53.   end;
  54. var
  55.   MainForm: TMainForm;
  56. implementation
  57. uses uTabHost, uConjoinHost;
  58. {$R *.dfm}
  59. const
  60. {  Colors: array[0..6] of TColor = (clWhite, clBlue, clGreen, clRed, clTeal,
  61.                                    clPurple, clLime);
  62.   ColStr: array[0..6] of string = ('White', 'Blue', 'Green', 'Red', 'Teal',
  63.                                    'Purple', 'Lime');}
  64.   Colors: array[0..0] of TColor = (clWhite);
  65.   ColStr: array[0..0] of string = ('White');
  66. var
  67.   DockWindows: array[0..0] of TDockableForm;
  68. {TMainForm}
  69. procedure TMainForm.FormCreate(Sender: TObject);
  70. begin
  71.   CreateDockableWindows;
  72. end;
  73. procedure TMainForm.CreateDockableWindows;
  74. var
  75.   I: Integer;
  76. begin
  77.   for I := 0 to High(DockWindows) do
  78.   begin
  79.     DockWindows[I] := TDockableForm.Create(Application);
  80.     DockWindows[I].Caption := ColStr[I];
  81. //    DockWindows[I].Memo1.Color := Colors[I];
  82. //    DockWindows[I].Memo1.Font.Color := Colors[I] xor $00FFFFFF;
  83. //    DockWindows[I].Memo1.Text := ColStr[I] + ' window ';
  84.   end;
  85. end;
  86. procedure TMainForm.CoolBar1DockOver(Sender: TObject; Source: TDragDockObject;
  87.   X, Y: Integer; State: TDragState; var Accept: Boolean);
  88. var
  89.   ARect: TRect;
  90. begin
  91.   Accept := (Source.Control is TToolBar);
  92.   if Accept then
  93.   begin
  94.     //Modify the DockRect to preview dock area (Coolbar client area)
  95. //    ARect.TopLeft := CoolBar1.ClientToScreen(CoolBar1.ClientRect.TopLeft);
  96. //    ARect.BottomRight := CoolBar1.ClientToScreen(CoolBar1.ClientRect.BottomRight);
  97.     Source.DockRect := ARect;
  98.   end;
  99. end;
  100. procedure TMainForm.ViewToolBar1Execute(Sender: TObject);
  101. begin
  102.   //Toggles the visible state of Toolbar1, regardless of it's docked state.
  103. //  ToolBar11.Checked := not ToolBar11.Checked;
  104. ////  btnToolBar1.Down := ToolBar11.Checked;
  105. //  if ToolBar1.Floating then
  106. //    ToolBar1.HostDockSite.Visible := ToolBar11.Checked
  107. //  else
  108. //    ToolBar1.Visible := ToolBar11.Checked;
  109. end;
  110. procedure TMainForm.ViewToolBar2Execute(Sender: TObject);
  111. begin
  112.   //Toggles the visible state of Toolbar2, regardless of it's docked state.
  113. //  ToolBar21.Checked := not ToolBar21.Checked;
  114. //  btnToolBar2.Down := ToolBar21.Checked;
  115. //  if ToolBar2.Floating then
  116. //    TToolDockForm(ToolBar2.HostDockSite).Visible := ToolBar21.Checked
  117. //  else
  118. //    ToolBar2.Visible := ToolBar21.Checked;
  119. end;
  120. procedure TMainForm.Exit1Click(Sender: TObject);
  121. begin
  122.   Close;
  123. end;
  124. procedure TMainForm.LeftDockPanelDockDrop(Sender: TObject;
  125.   Source: TDragDockObject; X, Y: Integer);
  126. begin
  127.   //OnDockDrop gets called AFTER the client has actually docked,
  128.   //so we check for DockClientCount = 1 before making the dock panel visible.
  129.   if (Sender as TPanel).DockClientCount = 1 then
  130.     ShowDockPanel(Sender as TPanel, True, nil);
  131.   (Sender as TPanel).DockManager.ResetBounds(True);
  132.   //Make DockManager repaints it's clients.
  133. end;
  134. procedure TMainForm.LeftDockPanelDockOver(Sender: TObject;
  135.   Source: TDragDockObject; X, Y: Integer; State: TDragState;
  136.   var Accept: Boolean);
  137. var
  138.   ARect: TRect;
  139. begin
  140.   Accept := Source.Control is TDockableForm;
  141.   if Accept then
  142.   begin
  143.     //Modify the DockRect to preview dock area.
  144.     ARect.TopLeft := LeftDockPanel.ClientToScreen(Point(0, 0));
  145.     ARect.BottomRight := LeftDockPanel.ClientToScreen(
  146.       Point(Self.ClientWidth div 3, LeftDockPanel.Height));
  147.     Source.DockRect := ARect;
  148.   end;
  149. end;
  150. procedure TMainForm.BottomDockPanelDockOver(Sender: TObject;
  151.   Source: TDragDockObject; X, Y: Integer; State: TDragState;
  152.   var Accept: Boolean);
  153. var
  154.   ARect: TRect;
  155. begin
  156.   Accept := Source.Control is TDockableForm;
  157.   if Accept then
  158.   begin
  159.     //Modify the DockRect to preview dock area.
  160.     ARect.TopLeft := BottomDockPanel.ClientToScreen(
  161.       Point(0, -Self.ClientHeight div 3));
  162.     ARect.BottomRight := BottomDockPanel.ClientToScreen(
  163.       Point(BottomDockPanel.Width, BottomDockPanel.Height));
  164.     Source.DockRect := ARect;
  165.   end;
  166. end;
  167. procedure TMainForm.LeftDockPanelUnDock(Sender: TObject; Client: TControl;
  168.   NewTarget: TWinControl; var Allow: Boolean);
  169. begin
  170.   //OnUnDock gets called BEFORE the client is undocked, in order to optionally
  171.   //disallow the undock. DockClientCount is never 0 when called from this event.
  172.   if (Sender as TPanel).DockClientCount = 1 then
  173.     ShowDockPanel(Sender as TPanel, False, nil);
  174. end;
  175. procedure TMainForm.ShowDockPanel(APanel: TPanel; MakeVisible: Boolean; Client: TControl);
  176. begin
  177.   //Client - the docked client to show if we are re-showing the panel.
  178.   //Client is ignored if hiding the panel.
  179.   //Since docking to a non-visible docksite isn't allowed, instead of setting
  180.   //Visible for the panels we set the width to zero. The default InfluenceRect
  181.   //for a control extends a few pixels beyond it's boundaries, so it is possible
  182.   //to dock to zero width controls.
  183.   //Don't try to hide a panel which has visible dock clients.
  184.   if not MakeVisible and (APanel.VisibleDockClientCount > 1) then
  185.     Exit;
  186. {  if APanel = LeftDockPanel then
  187.     VSplitter.Visible := MakeVisible
  188.   else
  189.     HSplitter.Visible := MakeVisible;}
  190.     VSplitter.Visible := MakeVisible;
  191.     if MakeVisible then
  192.       if APanel = LeftDockPanel then
  193.       begin
  194.         APanel.Width := ClientWidth div 3;
  195.         VSplitter.Left := APanel.Width + VSplitter.Width;
  196.       end
  197.       else begin
  198.         APanel.Height := ClientHeight div 3;
  199. //        HSplitter.Top := ClientHeight - APanel.Height - HSplitter.Width;
  200.       end
  201.     else
  202.       if APanel = LeftDockPanel then
  203.         APanel.Width := 0
  204.       else
  205.         APanel.Height := 0;
  206.   if MakeVisible and (Client <> nil) then Client.Show;
  207. end;
  208. procedure TMainForm.ExitActionExecute(Sender: TObject);
  209. begin
  210.   Close;
  211. end;
  212. procedure TMainForm.ViewWhiteWindowExecute(Sender: TObject);
  213. var
  214.   DockWindow: TDockableForm;
  215. begin
  216.   DockWindow := DockWindows[(Sender as TComponent).Tag];
  217.   with DockWindow do
  218.     //if the docked window is TabDocked, it is docked to the PageControl
  219.     //(owned by TTabDockHost) so show the host form.
  220.     if HostDockSite is TPageControl then
  221.       TTabDockHost(HostDockSite.Owner).Show
  222.     else
  223.       //If window is conjoin-docked, host and/or form may not be visible
  224.       //so show both.
  225.       if (HostDockSite is TConjoinDockHost) and not HostDockSite.Visible then
  226.       begin
  227.         HostDockSite.Show;
  228.         TConjoinDockHost(HostDockSite).UpdateCaption(nil);
  229.         DockWindow.Show;
  230.       end else
  231.         //If form is docked to one of the "hidden" docking panels, resize the
  232.         //panel and re-show the docked form.
  233.         if (HostDockSite is TPanel)
  234.         and ((HostDockSite.Height = 0) or (HostDockSite.Width = 0)) then
  235.           MainForm.ShowDockPanel(HostDockSite as TPanel, True, DockWindow)
  236.         else
  237.           //if the window isn't docked at all, simply show it.
  238.           DockWindow.Show;
  239. end;
  240. procedure TMainForm.LeftDockPanelGetSiteInfo(Sender: TObject;
  241.   DockClient: TControl; var InfluenceRect: TRect; MousePos: TPoint;
  242.   var CanDock: Boolean);
  243. begin
  244.   //if CanDock is true, the panel will not automatically draw the preview rect.
  245.   CanDock := DockClient is TDockableForm;
  246. end;
  247. procedure TMainForm.Button1Click(Sender: TObject);
  248. begin
  249.   skindata1.active := not skindata1.active; 
  250. end;
  251. end.