Nunca hago nada de eso, si necesito una ventana, pues uso una ventana, todo depende del look que le quiera dar a mi aplicación, pero en definitiva, nunca he usado formularios MDI, me parece que son horribles, ademas, para eso están las ventanas modales, Tabs, Notebook, paneles y demás, ahora si lo que quieres es que un panel pueda cambiar de tamaño y pocisión, no es muy dificil.
Código Delphi
[-]
procedure TPanel.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited MouseDown(Button, Shift, X, Y);
lastPos := ClientToScreen(point(X,Y));
isMouseDown := true;
end;
procedure TPanel.MouseMove(Shift: TShiftState; X, Y: Integer);
var
diff,newPos:TPoint;
newRect:TRect;
begin
inherited MouseMove(Shift, X, Y);
newPos := clientToScreen(point(X,Y));
if isMouseDown then begin
diff.x := newpos.x-LastPos.x;
diff.y := newpos.y-LastPos.y;
if panelMode in [pmMoveSelf] then
begin
newRect := BoundsRect;
OffsetRect(newRect, diff.x, diff.y);
BoundsRect := newRect;
end else begin
newRect := parent.BoundsRect;
case panelmode of
pmMoveSelf: OffsetRect(newRect, diff.x, diff.y);
pmMoveParent: OffsetRect(newRect, diff.x, diff.y);
pmResizeParent:
begin
inc(newRect.right,diff.x);
inc(newRect.bottom,diff.y);
end;
pmResizeParentLeft: inc(newRect.left,diff.x);
pmResizeParentRight: inc(newRect.right,diff.x);
pmResizeParentTop: inc(newRect.top,diff.y);
pmResizeParentBottom: inc(newRect.bottom,diff.y);
end;
parent.BoundsRect := newRect;
end;
end;
LastPos := newPos;
end;
procedure TPanel.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited MouseUp(Button, Shift, X, Y);
IsMouseDown := false;
end;
{$R *.lfm}
procedure TForm1.FormDblClick(Sender: TObject);
begin
application.Terminate;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
wLeft.PanelMode := pmResizeParentLeft;
wright.PanelMode := pmResizeParentRight;
wTop.PanelMode := pmResizeParentTop;
wBottom.PanelMode := pmResizeParentBottom;
panel1.PanelMode := pmMoveSelf;
panel2.PanelMode := pmResizeParent;
panel3.PanelMode := pmMoveParent;
Self.DoubleBuffered:=True;
end;
Esto debería servirte.