uMain.pas
资源名称:winskin.rar [点击查看]
上传用户:lmk588
上传日期:2013-04-16
资源大小:5120k
文件大小:9k
源码类别:
按钮控件
开发平台:
Delphi
- unit uMain;
- interface
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- Menus, StdCtrls, ComCtrls, ActnList, ToolWin, ExtCtrls, uDockForm,
- WinSkinData;
- type
- TMainForm = class(TForm)
- ActionList1: TActionList;
- ViewToolBar1: TAction;
- ViewToolBar2: TAction;
- LeftDockPanel: TPanel;
- BottomDockPanel: TPanel;
- ViewWhiteWindow: TAction;
- ExitAction: TAction;
- ViewBlueWindow: TAction;
- ViewGreenWindow: TAction;
- ViewRedWindow: TAction;
- ViewTealWindow: TAction;
- ViewPurpleWindow: TAction;
- ViewLimeWindow: TAction;
- SkinData1: TSkinData;
- Button1: TButton;
- Button2: TButton;
- VSplitter: TSplitter;
- Memo1: TMemo;
- procedure FormCreate(Sender: TObject);
- procedure CoolBar1DockOver(Sender: TObject; Source: TDragDockObject; X,
- Y: Integer; State: TDragState; var Accept: Boolean);
- procedure ViewToolBar1Execute(Sender: TObject);
- procedure ViewToolBar2Execute(Sender: TObject);
- procedure Exit1Click(Sender: TObject);
- procedure LeftDockPanelDockDrop(Sender: TObject;
- Source: TDragDockObject; X, Y: Integer);
- procedure LeftDockPanelDockOver(Sender: TObject;
- Source: TDragDockObject; X, Y: Integer; State: TDragState;
- var Accept: Boolean);
- procedure BottomDockPanelDockOver(Sender: TObject;
- Source: TDragDockObject; X, Y: Integer; State: TDragState;
- var Accept: Boolean);
- procedure LeftDockPanelUnDock(Sender: TObject; Client: TControl;
- NewTarget: TWinControl; var Allow: Boolean);
- procedure ExitActionExecute(Sender: TObject);
- procedure ViewWhiteWindowExecute(Sender: TObject);
- procedure LeftDockPanelGetSiteInfo(Sender: TObject;
- DockClient: TControl; var InfluenceRect: TRect; MousePos: TPoint;
- var CanDock: Boolean);
- procedure Button1Click(Sender: TObject);
- private
- procedure CreateDockableWindows;
- public
- procedure ShowDockPanel(APanel: TPanel; MakeVisible: Boolean; Client: TControl);
- end;
- var
- MainForm: TMainForm;
- implementation
- uses uTabHost, uConjoinHost;
- {$R *.dfm}
- const
- { Colors: array[0..6] of TColor = (clWhite, clBlue, clGreen, clRed, clTeal,
- clPurple, clLime);
- ColStr: array[0..6] of string = ('White', 'Blue', 'Green', 'Red', 'Teal',
- 'Purple', 'Lime');}
- Colors: array[0..0] of TColor = (clWhite);
- ColStr: array[0..0] of string = ('White');
- var
- DockWindows: array[0..0] of TDockableForm;
- {TMainForm}
- procedure TMainForm.FormCreate(Sender: TObject);
- begin
- CreateDockableWindows;
- end;
- procedure TMainForm.CreateDockableWindows;
- var
- I: Integer;
- begin
- for I := 0 to High(DockWindows) do
- begin
- DockWindows[I] := TDockableForm.Create(Application);
- DockWindows[I].Caption := ColStr[I];
- // DockWindows[I].Memo1.Color := Colors[I];
- // DockWindows[I].Memo1.Font.Color := Colors[I] xor $00FFFFFF;
- // DockWindows[I].Memo1.Text := ColStr[I] + ' window ';
- end;
- end;
- procedure TMainForm.CoolBar1DockOver(Sender: TObject; Source: TDragDockObject;
- X, Y: Integer; State: TDragState; var Accept: Boolean);
- var
- ARect: TRect;
- begin
- Accept := (Source.Control is TToolBar);
- if Accept then
- begin
- //Modify the DockRect to preview dock area (Coolbar client area)
- // ARect.TopLeft := CoolBar1.ClientToScreen(CoolBar1.ClientRect.TopLeft);
- // ARect.BottomRight := CoolBar1.ClientToScreen(CoolBar1.ClientRect.BottomRight);
- Source.DockRect := ARect;
- end;
- end;
- procedure TMainForm.ViewToolBar1Execute(Sender: TObject);
- begin
- //Toggles the visible state of Toolbar1, regardless of it's docked state.
- // ToolBar11.Checked := not ToolBar11.Checked;
- //// btnToolBar1.Down := ToolBar11.Checked;
- // if ToolBar1.Floating then
- // ToolBar1.HostDockSite.Visible := ToolBar11.Checked
- // else
- // ToolBar1.Visible := ToolBar11.Checked;
- end;
- procedure TMainForm.ViewToolBar2Execute(Sender: TObject);
- begin
- //Toggles the visible state of Toolbar2, regardless of it's docked state.
- // ToolBar21.Checked := not ToolBar21.Checked;
- // btnToolBar2.Down := ToolBar21.Checked;
- // if ToolBar2.Floating then
- // TToolDockForm(ToolBar2.HostDockSite).Visible := ToolBar21.Checked
- // else
- // ToolBar2.Visible := ToolBar21.Checked;
- end;
- procedure TMainForm.Exit1Click(Sender: TObject);
- begin
- Close;
- end;
- procedure TMainForm.LeftDockPanelDockDrop(Sender: TObject;
- Source: TDragDockObject; X, Y: Integer);
- begin
- //OnDockDrop gets called AFTER the client has actually docked,
- //so we check for DockClientCount = 1 before making the dock panel visible.
- if (Sender as TPanel).DockClientCount = 1 then
- ShowDockPanel(Sender as TPanel, True, nil);
- (Sender as TPanel).DockManager.ResetBounds(True);
- //Make DockManager repaints it's clients.
- end;
- procedure TMainForm.LeftDockPanelDockOver(Sender: TObject;
- Source: TDragDockObject; X, Y: Integer; State: TDragState;
- var Accept: Boolean);
- var
- ARect: TRect;
- begin
- Accept := Source.Control is TDockableForm;
- if Accept then
- begin
- //Modify the DockRect to preview dock area.
- ARect.TopLeft := LeftDockPanel.ClientToScreen(Point(0, 0));
- ARect.BottomRight := LeftDockPanel.ClientToScreen(
- Point(Self.ClientWidth div 3, LeftDockPanel.Height));
- Source.DockRect := ARect;
- end;
- end;
- procedure TMainForm.BottomDockPanelDockOver(Sender: TObject;
- Source: TDragDockObject; X, Y: Integer; State: TDragState;
- var Accept: Boolean);
- var
- ARect: TRect;
- begin
- Accept := Source.Control is TDockableForm;
- if Accept then
- begin
- //Modify the DockRect to preview dock area.
- ARect.TopLeft := BottomDockPanel.ClientToScreen(
- Point(0, -Self.ClientHeight div 3));
- ARect.BottomRight := BottomDockPanel.ClientToScreen(
- Point(BottomDockPanel.Width, BottomDockPanel.Height));
- Source.DockRect := ARect;
- end;
- end;
- procedure TMainForm.LeftDockPanelUnDock(Sender: TObject; Client: TControl;
- NewTarget: TWinControl; var Allow: Boolean);
- begin
- //OnUnDock gets called BEFORE the client is undocked, in order to optionally
- //disallow the undock. DockClientCount is never 0 when called from this event.
- if (Sender as TPanel).DockClientCount = 1 then
- ShowDockPanel(Sender as TPanel, False, nil);
- end;
- procedure TMainForm.ShowDockPanel(APanel: TPanel; MakeVisible: Boolean; Client: TControl);
- begin
- //Client - the docked client to show if we are re-showing the panel.
- //Client is ignored if hiding the panel.
- //Since docking to a non-visible docksite isn't allowed, instead of setting
- //Visible for the panels we set the width to zero. The default InfluenceRect
- //for a control extends a few pixels beyond it's boundaries, so it is possible
- //to dock to zero width controls.
- //Don't try to hide a panel which has visible dock clients.
- if not MakeVisible and (APanel.VisibleDockClientCount > 1) then
- Exit;
- { if APanel = LeftDockPanel then
- VSplitter.Visible := MakeVisible
- else
- HSplitter.Visible := MakeVisible;}
- VSplitter.Visible := MakeVisible;
- if MakeVisible then
- if APanel = LeftDockPanel then
- begin
- APanel.Width := ClientWidth div 3;
- VSplitter.Left := APanel.Width + VSplitter.Width;
- end
- else begin
- APanel.Height := ClientHeight div 3;
- // HSplitter.Top := ClientHeight - APanel.Height - HSplitter.Width;
- end
- else
- if APanel = LeftDockPanel then
- APanel.Width := 0
- else
- APanel.Height := 0;
- if MakeVisible and (Client <> nil) then Client.Show;
- end;
- procedure TMainForm.ExitActionExecute(Sender: TObject);
- begin
- Close;
- end;
- procedure TMainForm.ViewWhiteWindowExecute(Sender: TObject);
- var
- DockWindow: TDockableForm;
- begin
- DockWindow := DockWindows[(Sender as TComponent).Tag];
- with DockWindow do
- //if the docked window is TabDocked, it is docked to the PageControl
- //(owned by TTabDockHost) so show the host form.
- if HostDockSite is TPageControl then
- TTabDockHost(HostDockSite.Owner).Show
- else
- //If window is conjoin-docked, host and/or form may not be visible
- //so show both.
- if (HostDockSite is TConjoinDockHost) and not HostDockSite.Visible then
- begin
- HostDockSite.Show;
- TConjoinDockHost(HostDockSite).UpdateCaption(nil);
- DockWindow.Show;
- end else
- //If form is docked to one of the "hidden" docking panels, resize the
- //panel and re-show the docked form.
- if (HostDockSite is TPanel)
- and ((HostDockSite.Height = 0) or (HostDockSite.Width = 0)) then
- MainForm.ShowDockPanel(HostDockSite as TPanel, True, DockWindow)
- else
- //if the window isn't docked at all, simply show it.
- DockWindow.Show;
- end;
- procedure TMainForm.LeftDockPanelGetSiteInfo(Sender: TObject;
- DockClient: TControl; var InfluenceRect: TRect; MousePos: TPoint;
- var CanDock: Boolean);
- begin
- //if CanDock is true, the panel will not automatically draw the preview rect.
- CanDock := DockClient is TDockableForm;
- end;
- procedure TMainForm.Button1Click(Sender: TObject);
- begin
- skindata1.active := not skindata1.active;
- end;
- end.