home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue39 / userint / Editor.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-08-06  |  3.4 KB  |  115 lines

  1. unit Editor;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, ComCtrls, ExtCtrls;
  8.  
  9. type
  10.   TEditWin = class(TForm)
  11.     LeftDockPanel: TPanel;
  12.     RightDockPanel: TPanel;
  13.     BottomDockPanel: TPanel;
  14.     EditPanel: TPanel;
  15.     RichEdit1: TRichEdit;
  16.     LeftSplitter: TSplitter;
  17.     BottomSplitter: TSplitter;
  18.     procedure DockPanelDockDrop(Sender: TObject;
  19.       Source: TDragDockObject; X, Y: Integer);
  20.     procedure DockPanelUnDock(Sender: TObject; Client: TControl;
  21.       NewTarget: TWinControl; var Allow: Boolean);
  22.     procedure LeftDockPanelDockOver(Sender: TObject;
  23.       Source: TDragDockObject; X, Y: Integer; State: TDragState;
  24.       var Accept: Boolean);
  25.     procedure BottomDockPanelDockOver(Sender: TObject;
  26.       Source: TDragDockObject; X, Y: Integer; State: TDragState;
  27.       var Accept: Boolean);
  28.     procedure DockPanelGetSiteInfo(Sender: TObject;
  29.       DockClient: TControl; var InfluenceRect: TRect; MousePos: TPoint;
  30.       var CanDock: Boolean);
  31.   private
  32.     { Private declarations }
  33.   public
  34.     { Public declarations }
  35.     procedure ShowDockPanel(APanel: TPanel; MakeVisible: Boolean);
  36.   end;
  37.  
  38. var
  39.   EditWin: TEditWin;
  40.  
  41. implementation
  42.  
  43. {$R *.DFM}
  44.  
  45. procedure TEditWin.ShowDockPanel(APanel: TPanel; MakeVisible: Boolean);
  46. begin
  47.   if APanel = LeftDockPanel then
  48.     LeftSplitter.Visible := MakeVisible
  49.   else
  50.     BottomSplitter.Visible := MakeVisible;
  51.  
  52.   if MakeVisible then
  53.     if APanel = LeftDockPanel then begin
  54.       APanel.Width := ClientWidth div 3;
  55.       LeftSplitter.Left := APanel.Width + LeftSplitter.Width;
  56.     end
  57.     else begin
  58.       APanel.Height := ClientHeight div 3;
  59.       BottomSplitter.Top := ClientHeight - APanel.Height - BottomSplitter.Width;
  60.     end
  61.   else
  62.     if APanel = LeftDockPanel then
  63.       APanel.Width := 0
  64.     else
  65.       APanel.Height := 0;
  66. end;
  67.  
  68. procedure TEditWin.DockPanelDockDrop(Sender: TObject;
  69.   Source: TDragDockObject; X, Y: Integer);
  70. begin
  71.   if (Sender as TPanel).DockClientCount = 1 then
  72.     ShowDockPanel(Sender as TPanel, True);
  73.   (Sender as TPanel).DockManager.ResetBounds(True);
  74. end;
  75.  
  76. procedure TEditWin.DockPanelUnDock(Sender: TObject; Client: TControl;
  77.   NewTarget: TWinControl; var Allow: Boolean);
  78. begin
  79.   if (Sender as TPanel).DockClientCount = 1 then
  80.     ShowDockPanel(Sender as TPanel, False);
  81. end;
  82.  
  83. procedure TEditWin.LeftDockPanelDockOver(Sender: TObject;
  84.   Source: TDragDockObject; X, Y: Integer; State: TDragState;
  85.   var Accept: Boolean);
  86. var
  87.   ARect : TRect;
  88. begin
  89.   ARect.TopLeft := LeftDockPanel.ClientToScreen(Point(0, 0));
  90.   ARect.BottomRight := LeftDockPanel.ClientToScreen(
  91.     Point(Self.ClientWidth div 3, LeftDockPanel.Height));
  92.   Source.DockRect := ARect;
  93. end;
  94.  
  95. procedure TEditWin.BottomDockPanelDockOver(Sender: TObject;
  96.   Source: TDragDockObject; X, Y: Integer; State: TDragState;
  97.   var Accept: Boolean);
  98. var
  99.   ARect : TRect;
  100. begin
  101.   ARect.TopLeft := BottomDockPanel.ClientToScreen(Point(0, -Self.ClientHeight div 3));
  102.   ARect.BottomRight := BottomDockPanel.ClientToScreen(
  103.     Point(BottomDockPanel.Width, BottomDockPanel.Height));
  104.   Source.DockRect := ARect;
  105. end;
  106.  
  107. procedure TEditWin.DockPanelGetSiteInfo(Sender: TObject;
  108.   DockClient: TControl; var InfluenceRect: TRect; MousePos: TPoint;
  109.   var CanDock: Boolean);
  110. begin
  111.   CanDock := DockClient is TForm;
  112. end;
  113.  
  114. end.
  115.