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
fwhite fwhite is offline
Miembro
 
Registrado: sep 2006
Posts: 37
Poder: 0
fwhite Va por buen camino
Aplicacion MDI

Hola amigos:
Mi problema es el siguiente:
Tengo Form1 (fsMDIForm) y Form2(fsMDIChild).Quiero abrir la Form2 con el siguiente procedimiento:
With TForm2.Create(Self);
try
Show;
finally
Free;
Hago click sobre el boton en Form1 y no se muestra.
Si cambio Form2 a fsNormal si aparece.
¿Cual es el problema?
Os espero. Graciñas.
Responder Con Cita
  #2  
Antiguo 22-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.271
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
Prueba a poner esta línea después del Show:

Código Delphi [-]
  ...
  Show;
  MessageDlg('acabo de abrirlo y voy a cerrarlo', mtWarning, [mbOK], 0);
  ...
__________________
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
  #3  
Antiguo 22-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.271
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
Código Delphi [-]
  With TForm2.Create(Self) do
  try
    Show;
    MessageDlg('acabo de abrirlo y voy a cerrarlo', mtWarning, [mbOK], 0);
  finally
    Free;
  end;

De todas formas no me queda claro que si cambias el tipo de form, sí aparezca.
Cuando el programa pasa por el Show, no se detiene, así que justo después del Show ejecuta el Free y lo destruye, de ahí que "no aparezca" (sí aparece pero fugazmente).

Si utilizas ShowModal y fsNormal, sí aparece porque en ese caso, ShowModal, sí detiene la ejecución del programa en es punto.
__________________
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
  #4  
Antiguo 22-09-2010
fwhite fwhite is offline
Miembro
 
Registrado: sep 2006
Posts: 37
Poder: 0
fwhite Va por buen camino
Aplicacion MDI

Si el pongo el estilo de la venta con fsMDIChild y la abro con ShowModal me da el siguiente mensaje de error:
"Cannot make a visible window modal".
¿Que es lo que pasa?
Responder Con Cita
  #5  
Antiguo 22-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.271
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
No puedes usar MDIChild y ShowModal. Si quieres un formulario MODAL debe ser de tipo normal, no tiene sentido que sea MDIChild.
__________________
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
  #6  
Antiguo 22-09-2010
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
¿Cuando eras formularios Child no valía con poner el visible a true para mostrarlos o a false para ocultarlos y usar la propiedad brintofront para ponerlos encima de los demás formularios?

Un saludo.
Responder Con Cita
  #7  
Antiguo 22-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.271
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 ElDioni Ver Mensaje
¿Cuando eras formularios Child no valía con poner el visible a true para mostrarlos o a false para ocultarlos y usar la propiedad brintofront para ponerlos encima de los demás formularios?
Eso puede que sí, pero BringToFront no es lo mismo que Modal, hay que tenerlo en cuenta.
__________________
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
  #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
  #9  
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
  #10  
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
  #11  
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
  #12  
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
  #13  
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
  #14  
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
  #15  
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
  #16  
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
  #17  
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 Caral Ver Mensaje
Hola
Por cierto:
Upppssss, desvirtuamos el hilo.
Amigo ecfisa corre a postear que este mes no te pagan.............
Saludos
Si es cierto que los pagan te voy a solicitar que me prestes algo de efectivo, o tal vez mejor a roman...

Saludos.
Responder Con Cita
  #18  
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.271
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 23:22:59.


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