Ver Mensaje Individual
  #8  
Antiguo 22-09-2010
Avatar de Ana María
Ana María Ana María is offline
Miembro
 
Registrado: ago 2008
Posts: 40
Reputación: 0
Ana María Va por buen camino
Aquí pongo un pequeño código, comentado, práctico para trabajar con aplicaciones MDI, usando la herencia.

Debes de crear un nuevo form al que llamarás MDI y a su respectiva Unit UMDI, hay que cambiar su propiedad FormStyle a fsMDIChild y en el evento ONClose colocar caFree, también hay que remover de la interface la declaración var MDI : TMDI, y agregar las classFunction tal y como se ve a continuación.

Código Delphi [-]
unit UMDI;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls;

type
  TMDI = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  public
    class function Formulario: TMDI;
    class function CrearOTraerAlFrente: TMDI;
  end;

implementation

{$R *.dfm}

procedure TMDI.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree; //Libera memoria al cerrar
end;

class function TMDI.Formulario: TMDI; //Función auxiliar para comprobar que un form
//está abierto
var
  I: Integer;
begin
  for I := Screen.FormCount - 1 downto 0 do
  begin
    TForm(Result) := Screen.Forms[i];
    if Result.ClassType = Self then
      Exit;
  end;
  Result := nil;
end;

class function TMDI.CrearOTraerAlFrente: TMDI;
begin
  Result := Formulario;
  LockWindowUpdate(Application.MainForm.ClientHandle); //Evita un molesto efecto
  // visual al crear la ventana
  try
    if Assigned(Result) then //Comprueba si existe el form y lo trae al frente
    begin
      if Result.WindowState = wsMinimized then
        ShowWindow(Result.Handle, SW_RESTORE);
      Result.BringToFront;
    end
    else
    begin
      Result := Create(Application.MainForm); //Si no existe lo crea y lo muestra
      Result.Show;
    end;
  finally
    LockWindowUpdate(0);
  end;
end;

end.


Debes heredar de el form que acabas de crear todos los forms MDI que necesites, para hacerlo en Delphi7 sigues : File > New>Other/(buscas el tab con el nombre de tu proyecto) en Delphi 2010 : File > New>Other/Inheritable Items, y haces dobleClick sobre MDI

Para llamarlo desde el form principal de tu aplicación solo debes agregarlo a la cláusula Uses de la implementación de tu form principal y escribir lo siguiente (para el caso de tu ejemplo):

Código Delphi [-]
TForm2.CrearOTraerAlFrente;


Con eso es suficiente para trabajar con MDI.

PD: No olvides quitar los forms heredados de la creación automática de forms. Project > Options > Forms

Última edición por Ana María fecha: 22-09-2010 a las 21:51:31. Razón: No me funcionaron las etiquetas
Responder Con Cita