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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
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
  #2  
Antiguo 22-09-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Ana María Ver Mensaje
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.
¿ Y despues no te cuesta leer ese código ?

Saludos.
Responder Con Cita
  #3  
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
Cita:
Empezado por ecfisa Ver Mensaje
¿ Y despues no te cuesta leer ese código ?

Saludos.
Claro que me cuesta, por eso lo edité. Prepotente.
Responder Con Cita
  #4  
Antiguo 22-09-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Ana María Ver Mensaje
Claro que me cuesta, por eso lo edité. Prepotente.
No es prepotencia Ana María, es algo que por lo visto no has cultivado. Se llama humor...

Espero que lo practiques, hace bién al que lo dá y al que sabe recibirlo.

Saludos.

Última edición por ecfisa fecha: 22-09-2010 a las 22:07:06.
Responder Con Cita
  #5  
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
Cita:
Empezado por ecfisa Ver Mensaje
No es prepotencia Ana María, es algo que por lo visto no has cultivado, se llama humor...

Espero que lo practiques, hace bién al que lo dá y al que sabe recibirlo.

Saludos.
Tienes razón .... hay gente que encuentra humor en tan poco... como por ejemplo: Encontrar humor en que, un post que se edita después de previsualisarlo descuadra las etiquetas.

PD: Comedidamente solicito a un moderador que no permita que se desvirtue este hilo y si es de su parecer eliminar los últimos 4 posts de este hilo. Muchas gracias
Responder Con Cita
  #6  
Antiguo 22-09-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Ana María Ver Mensaje
Tienes razón .... hay gente que encuentra humor en tan poco...
Ana María, cuando tenés un tiempo de vivir te dás cuenta que las verdaderas satifacciones no las encontrás en las grandilocuencias de la vida, si no en las pequeñas cosas. Espero que al igual que muchos de los que en este foro compartimos conocimientos y humor puedas disfrutar algún día de ello.

Particularmente me he equivocado mucho en mis post y muchos bromearon al respecto. Me pareció gracioso y me divertí con ellos.(lo que sucede es que yo ya he aceptado que me puedo equivocar )

Sin ir más lejos mi amigo Caral, es uno que corrige mis defectos con humor y siempre aprendo algo de sus correcciones además de reirme con sus ocurrencias.
Un grande del foro que merecidamente se ganó el título de 'novato premium'.

Saludos.

Última edición por ecfisa fecha: 22-09-2010 a las 22:40:22.
Responder Con Cita
  #7  
Antiguo 22-09-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Cita:
Empezado por Ana María Ver Mensaje
Tienes razón .... hay gente que encuentra humor en tan poco... como por ejemplo: Encontrar humor en que, un post que se edita después de previsualisarlo descuadra las etiquetas.
Que lastita ver que el humor de algunos ofenda tan brutalmente a otros.
Si no se tiene humor mejor no levantarse de la cama.

Cita:
Empezado por Ana María Ver Mensaje
PD: Comedidamente solicito a un moderador que no permita que se desvirtue este hilo y si es de su parecer eliminar los últimos 4 posts de este hilo. Muchas gracias
Despues de maravillosos 40 mensajes se puede decir que hacer a los Moderadores?????.
Si borran algun comentario no se dara el espiritu del foro que es simplemente expresarse libremente, me parece que la unica persona que quedo como mal educada aqui fue Ana la del barrio.
Saludos.
PD: La foto me recuerda a estas fotos que ponen los dedofilos para atraer a sus victimas., guapa la de la foto, no creen????
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 22-09-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Por cierto:
Upppssss, desvirtuamos el hilo.
Amigo ecfisa corre a postear que este mes no te pagan.............
Saludos
__________________
Siempre Novato
Responder Con Cita
  #9  
Antiguo 22-09-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Ana Maria se fue buscando el sol en la playa tarararararararara...rarara......
Saludos
PD: Se que tambien se fue con Eva.
PD2: Tema Nuevo, Hilo Nuevo.........
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 23-09-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por ecfisa Ver Mensaje
¿ Y despues no te cuesta leer ese código ?
Hay que decir cuando al inicio del código aparece esto:

Código Delphi [-]

Es porque sí se han colocado las etiquetas, pero al previsualizarlo se han perdido. Es un pequeño bug del código que se encarga de "colorear la sintaxis".
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



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 08:54:54.


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