1 unit sparta_FormBackgroundForMDI;
2 
3 {$mode objfpc}{$H+}
4 interface
5 
6 uses
7   Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls,
8   sparta_InterfacesMDI;
9 
10 type
11 
12   { TfrFormBackgroundForMDI }
13 
14   TfrFormBackgroundForMDI = class(TFrame, IDesignedFormBackground)
15     Panel1: TPanel;
16     procedure Panel1MouseDown(Sender: TObject; {%H-}Button: TMouseButton;
17       {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer);
18     procedure Panel1MouseMove(Sender: TObject; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer
19       );
20     procedure Panel1MouseUp(Sender: TObject; {%H-}Button: TMouseButton;
21       {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer);
22   private
23     FDesignedForm: IDesignedForm;
24     FResizeFrame: IResizeFrame;
25     FDelta: TPoint;
26     FDown: Boolean;
27 
GetMarginnull28     function GetMargin(const AIndex: Integer): Integer;
29   protected
GetParentnull30     function GetParent: TWinControl; virtual;
31     procedure SetParent(AParent: TWinControl); override;
GetResizeFramenull32     function GetResizeFrame: IResizeFrame;
33     procedure SetResizeFrame(AValue: IResizeFrame);
34 
GetDesignedFormnull35     function GetDesignedForm: IDesignedForm;
36   public
37     { public declarations }
38     constructor Create(const ADesignedForm: IDesignedForm); virtual; reintroduce;
39 
40     procedure RefreshValues;
41   end;
42 
43 implementation
44 
45 {$R *.lfm}
46 
47 { TfrFormBackgroundForMDI }
48 
49 procedure TfrFormBackgroundForMDI.Panel1MouseDown(Sender: TObject;
50   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
51 var
52   LCtrlPoint: TPoint;
53 begin
54   LCtrlPoint := Panel1.ScreenToClient(Mouse.CursorPos);
55   FDelta.x := -LCtrlPoint.X;
56   FDelta.y := -LCtrlPoint.Y;
57   FDown := True;
58 end;
59 
60 procedure TfrFormBackgroundForMDI.Panel1MouseMove(Sender: TObject;
61   Shift: TShiftState; X, Y: Integer);
62 var
63   frmPoint: TPoint;
64   LFrame: TCustomFrame;
65 begin
66   if (not FDown) or (FResizeFrame = nil) then
67     Exit;
68 
69   frmPoint := Self.ScreenToClient(Mouse.CursorPos);
70   LFrame := FResizeFrame.Frame;
71   LFrame.Left := LFrame.Left + (frmPoint.x + FDelta.x);
72   LFrame.Top := LFrame.Top + (frmPoint.y + FDelta.y);
73 end;
74 
75 procedure TfrFormBackgroundForMDI.Panel1MouseUp(Sender: TObject;
76   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
77 begin
78   FDown := False;
79 end;
80 
GetMarginnull81 function TfrFormBackgroundForMDI.GetMargin(const AIndex: Integer): Integer;
82 begin
83   case AIndex of
84     0: // left
85       Result := 5;
86     1: // Top
87       Result := 30;
88     2: // Right
89       Result := 5;
90     3: // Bottom
91       Result := 5;
92   end;
93 end;
94 
GetParentnull95 function TfrFormBackgroundForMDI.GetParent: TWinControl;
96 begin
97   Result := inherited Parent;
98 end;
99 
100 procedure TfrFormBackgroundForMDI.SetParent(AParent: TWinControl);
101 begin
102   inherited SetParent(AParent);
103 end;
104 
TfrFormBackgroundForMDI.GetResizeFramenull105 function TfrFormBackgroundForMDI.GetResizeFrame: IResizeFrame;
106 begin
107   Result := FResizeFrame;
108 end;
109 
110 procedure TfrFormBackgroundForMDI.SetResizeFrame(AValue: IResizeFrame);
111 begin
112   FResizeFrame := AValue;
113 end;
114 
GetDesignedFormnull115 function TfrFormBackgroundForMDI.GetDesignedForm: IDesignedForm;
116 begin
117   Result := FDesignedForm as IDesignedForm;
118 end;
119 
120 constructor TfrFormBackgroundForMDI.Create(const ADesignedForm: IDesignedForm);
121 begin
122   inherited Create(nil);
123   FDesignedForm := ADesignedForm;
124   RefreshValues;
125 end;
126 
127 procedure TfrFormBackgroundForMDI.RefreshValues;
128 begin
129 
130 end;
131 
132 end.
133 
134