Hola a todos.
No se si les servira, pero de todos modos lo quiero compartir con Ustedes.
Existe una forma de disimular MDI, colocando por ejemplo en el formulario principal un TPageControl, añadiendo las siguientes rutinas en el formulario:
Código Delphi
[-]
function TfrmPrincipal.AbaExiste(NomeAba: string): Boolean;
var
i: Integer;
Aba: TTabSheet;
begin
Result := False;
for i := 0 to PageControl1.PageCount - 1 do begin
if PageControl1.Pages[i].Caption = NomeAba then begin
Aba := PageControl1.Pages[i];
PageControl1.ActivePage := Aba;
Result := True;
break;
end;
end;
end;
procedure TfrmPrincipal.CriarAba(clsForm: TForm; Index: Integer);
var
TabSheet: TTabSheet;
Form: TForm;
begin
TabSheet := TTabSheet.Create(Self);
Form := clsForm;
if AbaExiste(Form.Caption) then
Exit;
with TabSheet do begin
PageControl := PageControl1;
Caption := Form.Caption;
ImageIndex := Index;
end;
with Form do begin
Align := alClient;
BorderStyle := bsNone;
Parent := TabSheet;
Show;
end;
PageControl1.ActivePage := TabSheet;
PageControl1.Visible := True;
end;
procedure TfrmPrincipal.FecharAba(NomeAba: string);
var
i: integer;
Aba: TTabSheet;
begin
for i := 0 to PageControl1.PageCount - 1 do
begin
if PageControl1.Pages[i].Caption = NomeAba then
begin
Aba := PageControl1.Pages[i];
Aba.Destroy;
PageControl1.ActivePageIndex := 0;
break;
end;
end;
end;
Para abrir la ventana dentro del TPagecontrol, solo deben colocar la siguiente sentencia:
Código Delphi
[-]
CriarAba(frmClientes, 1);
Y para cerrar la ventana, en el boton con el que cierran la ventana:
Código Delphi
[-]
frmPrincipal.FecharAba(frmClientes.Caption);
Para que no se confundan con los X en la parte superior derecha de la ventana, deben agregar alguito mas de codigo. Sino, cierran la ventana principal y con eso salen del sistema.
En el formulario principal (en el OnCloseQuery):
Obs: los parametros de PChar() los declare en constantes, igual que ultimo parametro del mensaje. Aqui los puse para que no les confunda.
Código Delphi
[-]
CanClose := Application.MessageBox(PChar('¿Realmente desea salir del programa?'), PChar(), MB_YESNO + MB_ICONWARNING + MB_DEFBUTTON2)=ID_YES;
if(CanClose)then
Application.Terminate
else
Exit;
En la ventana que se abre dentro del TPageControl deben colocar siguiente codigo:
Código Delphi
[-]
procedure frmClientes.FormClose(Sender: TObject; var CloseAction: TCloseAction
);
var
b: Boolean;
begin
b := True;
frmPrincipal.OnCloseQuery(frmPrincipal, b);
CloseAction := caFree;
end;
Y eso es todo. Funciona bajo Windows y tambien lo probe bajo Linux Mint 15 y funciona de maravilla.
Espero que les sirve.
Saludos