home *** CD-ROM | disk | FTP | other *** search
- unit Editor;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, ComCtrls, ExtCtrls;
-
- type
- TEditWin = class(TForm)
- LeftDockPanel: TPanel;
- RightDockPanel: TPanel;
- BottomDockPanel: TPanel;
- EditPanel: TPanel;
- RichEdit1: TRichEdit;
- LeftSplitter: TSplitter;
- BottomSplitter: TSplitter;
- procedure DockPanelDockDrop(Sender: TObject;
- Source: TDragDockObject; X, Y: Integer);
- procedure DockPanelUnDock(Sender: TObject; Client: TControl;
- NewTarget: TWinControl; var Allow: Boolean);
- 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 DockPanelGetSiteInfo(Sender: TObject;
- DockClient: TControl; var InfluenceRect: TRect; MousePos: TPoint;
- var CanDock: Boolean);
- private
- { Private declarations }
- public
- { Public declarations }
- procedure ShowDockPanel(APanel: TPanel; MakeVisible: Boolean);
- end;
-
- var
- EditWin: TEditWin;
-
- implementation
-
- {$R *.DFM}
-
- procedure TEditWin.ShowDockPanel(APanel: TPanel; MakeVisible: Boolean);
- begin
- if APanel = LeftDockPanel then
- LeftSplitter.Visible := MakeVisible
- else
- BottomSplitter.Visible := MakeVisible;
-
- if MakeVisible then
- if APanel = LeftDockPanel then begin
- APanel.Width := ClientWidth div 3;
- LeftSplitter.Left := APanel.Width + LeftSplitter.Width;
- end
- else begin
- APanel.Height := ClientHeight div 3;
- BottomSplitter.Top := ClientHeight - APanel.Height - BottomSplitter.Width;
- end
- else
- if APanel = LeftDockPanel then
- APanel.Width := 0
- else
- APanel.Height := 0;
- end;
-
- procedure TEditWin.DockPanelDockDrop(Sender: TObject;
- Source: TDragDockObject; X, Y: Integer);
- begin
- if (Sender as TPanel).DockClientCount = 1 then
- ShowDockPanel(Sender as TPanel, True);
- (Sender as TPanel).DockManager.ResetBounds(True);
- end;
-
- procedure TEditWin.DockPanelUnDock(Sender: TObject; Client: TControl;
- NewTarget: TWinControl; var Allow: Boolean);
- begin
- if (Sender as TPanel).DockClientCount = 1 then
- ShowDockPanel(Sender as TPanel, False);
- end;
-
- procedure TEditWin.LeftDockPanelDockOver(Sender: TObject;
- Source: TDragDockObject; X, Y: Integer; State: TDragState;
- var Accept: Boolean);
- var
- ARect : TRect;
- begin
- ARect.TopLeft := LeftDockPanel.ClientToScreen(Point(0, 0));
- ARect.BottomRight := LeftDockPanel.ClientToScreen(
- Point(Self.ClientWidth div 3, LeftDockPanel.Height));
- Source.DockRect := ARect;
- end;
-
- procedure TEditWin.BottomDockPanelDockOver(Sender: TObject;
- Source: TDragDockObject; X, Y: Integer; State: TDragState;
- var Accept: Boolean);
- var
- ARect : TRect;
- begin
- ARect.TopLeft := BottomDockPanel.ClientToScreen(Point(0, -Self.ClientHeight div 3));
- ARect.BottomRight := BottomDockPanel.ClientToScreen(
- Point(BottomDockPanel.Width, BottomDockPanel.Height));
- Source.DockRect := ARect;
- end;
-
- procedure TEditWin.DockPanelGetSiteInfo(Sender: TObject;
- DockClient: TControl; var InfluenceRect: TRect; MousePos: TPoint;
- var CanDock: Boolean);
- begin
- CanDock := DockClient is TForm;
- end;
-
- end.
-