Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 22-09-2010
Avatar de Ana María
Ana María Ana María is offline
Miembro
 
Registrado: ago 2008
Posts: 40
Poder: 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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Minimizar una aplicacion al iniciar aplicacion sidneyb OOP 7 11-01-2010 18:51:53
Aplicación de Servicio+Aplicación Normal +Socket jake API de Windows 5 21-06-2007 18:53:19
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
Diferencia entre aplicacion Clx y aplicación normal??? JorgeBec Varios 1 27-10-2004 17:30:49
aplicacion vertical? aplicacion horizontal? maruenda Varios 3 28-02-2004 23:23:20


La franja horaria es GMT +2. Ahora son las 17:46:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi