unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil,
Forms, Controls, Graphics,
Dialogs, ExtCtrls,
Grids, TAGraph, types;
type
{ TPanel }
TPanel = class(ExtCtrls.TPanel)
protected
isMouseDown:boolean;
LastPos:TPoint;
procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override;
procedure MouseMove(Shift: TShiftState; X,Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override;
procedure Click; override;
procedure Panel1Resize(Sender: TObject);
end;
{ TForm1 }
TForm1 = class(TForm)
Chart1: TChart;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
StringGrid1: TStringGrid;
procedure FormResize(Sender: TObject);
private
{ private declarations }
lastPos:TPoint;
isMouseDown:boolean;
Procedure Arrange4Panels(pnl1, pnl2, pnl3, pnl4: TPanel;
iBorder: Integer);
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormResize(Sender: TObject);
begin
Arrange4Panels(Panel1, Panel2, Panel3, Panel4, 20);
end;
Procedure TForm1.Arrange4Panels(pnl1, pnl2, pnl3, pnl4: TPanel; // Thanks RAW
iBorder: Integer);
Var
iX, iY: Integer;
Begin
iX:= (ClientWidth - 3*iBorder) Div 2;
iY:= (ClientHeight - 3*iBorder) Div 2;
pnl1.SetBounds(iBorder, iBorder, iX, iY);
pnl2.SetBounds(iBorder*2 +iX, iBorder, iX, iY);
pnl3.SetBounds(iBorder, iBorder*2 +iY, iX, iY);
pnl4.SetBounds(pnl2.Left, pnl3.Top, iX, iY);
End;
{ TPanel }
procedure TPanel.Panel1Resize(Sender: TObject);
begin
with Sender as TPanel do
begin
// Something here
end;
end;
procedure TPanel.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
inherited MouseDown(Button, Shift, X, Y);
isMouseDown := true;
LastPos := ClientToScreen(point(X, Y));
end;
procedure TPanel.MouseMove(Shift: TShiftState; X, Y: Integer);
var
newRect:TRect;
newPos:TPoint;
begin
inherited MouseMove(Shift, X, Y);
newPos := ClientToScreen(point(x,y));
if isMouseDown then
begin
newRect := BoundsRect;
OffsetRect(newRect, newPos.x-LastPos.x, NewPos.Y-LastPos.Y);
BoundsRect := newRect;
end;
LastPos := newPos;
end;
procedure TPanel.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited MouseUp(Button, Shift, X, Y);
isMouseDown := false;
end;
procedure TPanel.Click;
begin
inherited Click;
BringToFront;
end;
end.