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 07-05-2012
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 193
Poder: 21
ramonibk Va por buen camino
Maximizar MDIChild

Buenas de nuevo.

Otra pregunta sobre los From hijos.

El caso es que para controlar si mi Form-Hijo se encuentra abierto he creado una variable global la cual pongo a true o false segun este abierto o cerrado.

por lo que en el boton de llamada pondria
Código Delphi [-]
// ArticuloFrm seria la bariable global
Var
 Articulo : TfrmArticulos;
begin
 If ArticuloFrm = False Then
  Begin
   Articulo := TfrmArticulos.Create(Self);
   ArticuloFrm := True;
  End else
  // ***???***
end;

La cosa es como puedo hacer para que en caso de que el form se encuentra abierto.
Bien lo maximice si se encuentra minimizado
Bien lo pase a primer plano si se encontrara en segundo plano.
Responder Con Cita
  #2  
Antiguo 07-05-2012
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
Hola ramonibk.

Cita:
La cosa es como puedo hacer para que en caso de que el form se encuentra abierto.
Bien lo maximice si se encuentra minimizado
Bien lo pase a primer plano si se encontrara en segundo plano.
Código Delphi [-]
  if Form2.WindowState = wsMinimized then // esta minimizado ?
    Form2.WindowState:= wsMaximized;      // maximizar;
  Form2.BringToFront;   // traer al frente

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 07-05-2012
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Verifica el valor de la propiedad WindowState.

Código Delphi [-]
if Artitulo.WindowState = wsMinimized then
  Articulo.WindowState = wsNormal;  // Con esto restauramos la ventana...
Articulo.BringToFront // Aquí traemos la ventana al frente...


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #4  
Antiguo 07-05-2012
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 193
Poder: 21
ramonibk Va por buen camino
He probado diferentes opciones sobre este código. Poco mas o menos
pero siempre de de acceso violation.

Código Delphi [-]
procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
 Articulo : TfrmArticulos;
begin
 If ArticuloFrm = True Then
  Begin
   if frmArticulos.WindowState = wsNormal Then
     Begin
      frmArticulos.BringToFront;
     End;
   if frmArticulos.WindowState = wsMinimized then
     Begin
      frmArticulos.WindowState := wsNormal;  
     End;
  End;
 If ArticuloFrm = False Then
  Begin
   Articulo := TfrmArticulos.Create(Self);
   ArticuloFrm := True;
  End;
end;
Responder Con Cita
  #5  
Antiguo 07-05-2012
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Tienes el error por que estas tratando de usar una variable a un objeto que no ha sido creado (frmArticulos).

Otra cosa, la variable Articulo es local al método SpeedButton1Click, por lo tanto, esta se elimina al salir de mismo, lo que dificulta que puedas acceder de nuevo al objeto creado (el formulario sigue accesible desde la propiedad MDIChildren del formulario principal de la aplicación).

Verifica bien estos detalles para que puedas corregir el error que obtienes.



Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #6  
Antiguo 07-05-2012
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
Hola ramonibk.

Probá de este modo:
Código Delphi [-]
...
procedure TForm1.TraerFormAlFrente(AName: string);
var
  i: Integer;
begin
  for i:= MDIChildCount-1 downto 0 do
    if MDIChildren[i].Name = AName then
    begin
      if MDIChildren[i].WindowState = wsMinimized then
        MDIChildren[i].WindowState:= wsMaximized;
      MDIChildren[i].BringToFront;
    end;
end;

Ejemplo llamada:
Código Delphi [-]
   TraerFormAlFrente('Form5');
No te dará el error ya que no invocará una ventana no creada (ni la mostrará), pero como bién dice maeyanes, el error sigue estando...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 07-05-2012 a las 22:49:22.
Responder Con Cita
  #7  
Antiguo 08-05-2012
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 193
Poder: 21
ramonibk Va por buen camino
Buenos dias.
Como dices maeyanes
Cita:
Tienes el error por que estas tratando de usar una variable a un objeto que no ha sido creado (frmArticulos).

Otra cosa, la variable Articulo es local al método SpeedButton1Click, por lo tanto, esta se elimina al salir de mismo, lo que dificulta que puedas acceder de nuevo al objeto creado (el formulario sigue accesible desde la propiedad MDIChildren del formulario principal de la aplicación).

Verifica bien estos detalles para que puedas corregir el error que obtienes.
la variable Articulos es de tipo boolean, como variable global y esta definida dentro del Form principal (fsMDIForm) y se inicializa en el create del form
Responder Con Cita
  #8  
Antiguo 08-05-2012
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
Hola ramonibk.

No entiendo cuál es el problema ahora, pero tomando en cuenta lo que mencionas en el primer mensaje:
Cita:
La cosa es como puedo hacer para que en caso de que el form se encuentra abierto.
Bien lo maximice si se encuentra minimizado
Bien lo pase a primer plano si se encontrara en segundo plano.
Y viendo que en el código del mensaje #4 intentas la creación sin lograrlo, creo que con este procedimiento vas a dar solución al problema:
Código Delphi [-]
...
(* Crear MDIChild  *)
procedure TForm1.AbrirMDIChild(AClass: TFormClass);
var
  i: Integer;
begin
  for i:= MDIChildCount-1 downto 0 do
    if MDIChildren[i] is AClass then //  ¿ Se encontro ?
    begin
      if MDIChildren[i].WindowState = wsMinimized then // Si, ¿ Minimizado ?
        MDIChildren[i].WindowState:= wsMaximized;  // => Maximizar
      MDIChildren[i].BringToFront;  // traer al frente
      Exit; // nada mas que hacer aquí...
    end;
   with AClass.Create(Self) do // no se encontró => Crearlo
    BringToFront; // traer al frente
end;

(* Ejemplo de llamada *)
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  AbrirMDIChild(TMDIChild1);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 08-05-2012
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 193
Poder: 21
ramonibk Va por buen camino
Buenas de nuevo.

La creación del Form si la hago correctamente.
el problema me surge cuando este esta ya creado. Para controlar si esta creado o no uso la bariable Articulo cuando creo el form la pongo a true y al cerrar el form la pongo a false.

el problema me surge si cuando el for fa esta creado deseo ponerlo en primer plano (se puede encontrar en segundo plano o minimizado. y abría que ponerlo en primer plano en modo normal.)
ecfisa todavía no he podido probar el código que me comentas pero en cuanto lo pueda hacer os comento los resultados.
Responder Con Cita
  #10  
Antiguo 08-05-2012
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
Hola ramonibk.

Cita:
La creación del Form si la hago correctamente.
el problema me surge cuando este esta ya creado.
Si, la verdad me expresé mál , debí decir: "intentas mostrarlo o crearlo recibiendo errores de access violation como nos comentas en el mensaje #4". Pero del modo que te indico no vas a tener ese inconveniente.

Aprovecho para decirte algo que no sé si dejé bién claro en el mensaje anterior. Como argumento del procedimiento tenes que pasar la clase del form ,no la instancia. Ej.: TForm1 y no Form1.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 08-05-2012 a las 12:56:40.
Responder Con Cita
  #11  
Antiguo 08-05-2012
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Cita:
Empezado por ramonibk Ver Mensaje
la variable Articulos es de tipo boolean, como variable global y esta definida dentro del Form principal (fsMDIForm) y se inicializa en el create del form
Según el código que publicaste, la variable Articulos es del tipo TfrmArticulos y es local al método.

Código Delphi [-]
Var
 Articulo : TfrmArticulos;

y la variable (entiendo que global) ArticuloFrm es la que es de tipo Boolean. A menos que haya sido un error tuyo al momento de publicar tu código.


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #12  
Antiguo 08-05-2012
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 193
Poder: 21
ramonibk Va por buen camino
Ok ecfisa ya he probado el código que me distes y funciona correctamente ahora solo me queda ver que es lo que yo estaba haciendo mal.

y si maeyanes efectivamente me he equivocado al comentar antes las variables. la variable Articulos es de tipo local y ArticuloFrm es de tipo global.
Gracias por el apunte.
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
Cerrar MDIChild desde otro MDIChild Lenny Varios 2 14-12-2011 21:06:34
Problema al maximizar MDIChild drykea Varios 8 28-08-2008 11:40:12
MDIChild abre otro MDIChild Paulao Varios 6 10-04-2008 18:02:05
Maximizar forms MDIChild novato03 Varios 4 04-09-2007 18:40:40
Fallos al maximizar ventana MDIChild mazinger Varios 3 08-08-2005 14:23:00


La franja horaria es GMT +2. Ahora son las 04:33:20.


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