Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Cerrar MDIChild cuando esta maximizada (https://www.clubdelphi.com/foros/showthread.php?t=76233)

Diego827 18-10-2011 01:50:31

Cerrar MDIChild cuando esta maximizada
 
Amigos del Club, mi problema es el siguiente:

Tengo una ventana MDIChild dentro de mi ventana padre MDIForm; hasta aqui todo Ok, al evento Onclose() de la ventana MDIChild le coloqué la función caFree y la cierra sin problemas; el clavo esta cuando maximizo el MDIChild, esta se expande y oculta sus botones de minimizar, maximizar y cerrar haciendo imposible su cierre.

¿Que código puedo utilizar para que se cierre la ventana MDIChild maximizada?
¿Existe acaso alguna función que cierre todas las ventanas hijo?

No se si estuvo bien preguntar dos cosas al mismo tiempo es solo que las dos me solucionan el problema.

Gracias amigos ;)

Caminante 18-10-2011 02:17:18

Me parece extraño ese comportamiento que indicas. Yo utilizo ventanas MDI y nunca ha a pasado.
De todas formas si quieres cerrar la ventana puedes poner un boton en su form hijo asignando Close al hacer click.
En cuanto a lo segunto en el form Midparent puedes usar las propiedades MDiChildcount y mdichildren[] para manipular los forms hijos.

Saludos

Diego827 18-10-2011 06:06:21

Posible razòn
 
Creo que no lo dije todo; estoy utilizando controles y forms con pieles, Business skin. Quizas esa sea la causa. Veo y posteo gracias amigo.

roman 18-10-2011 16:25:32

Cuando la ventana carece de menú principal, al maximizar una ventana hija, los botones de cerrar, maximizar, etc., se pierden. Si la ventana principal tiene menú principal, los botones aparecen normalmente.

// Saludos

Diego827 18-10-2011 18:46:26

Hola estimado roman, gracias por tu respuesta.

Creo fielmente en lo que has dicho; esa es la razón y ya sospechaba que las pieles tenian que ver pero luego de tu comentario estoy de acuerdo.

Ahora bien, como puedo cerrar la ventana que este maximizada? existe algun método para la eliminación de ventanas hijas?
Existe acaso un metodo que elimine todas las ventanas hijas de golpe?

Se que puedo agregar un boton de "cerrar" y al metodo onclick() asignarle la funcion caFree() pero seria algo chapucero (clasico de los novatos como yop)

Gracias amigos.

ecfisa 18-10-2011 19:25:09

Hola Diego827.
Cita:

Existe acaso un metodo que elimine todas las ventanas hijas de golpe?
Código Delphi [-]
procedure TMDIForm.btCloseAllChildsClick(Sender: TObject);
var
  i: Integer;
begin
  for i:= MDIChildCount-1 downto 0 do
    MDIChildren[i].Close;
end;
Siempre que todos los MDIChildren tengan Action:= caFree en su evento OnClose, si no se minimizarán.

Saludos.

Diego827 18-10-2011 20:34:42

Estimado ecfisa; gracias por responder.

Pruebo y posteo.

Gracias.

ecfisa 18-10-2011 22:55:14

Perdón Diego, ahora reparo que era el foro C++ Builder.

Entonces sería:
Código:

void __fastcall TForm1::btnCloseAllChildsClick(TObject *Sender)
{
  for(int i= MDIChildCount-1; i>= 0; i--)
    MDIChildren[i]->Close();
}

Un saludo.

Diego827 19-10-2011 00:11:32

Exacto; gracias a todos.
 
Estimado ecfisa:

Encontre algo interesante y que te da la total razon:

Código Delphi [-]
/*
void __fastcall TForm1::CloseChildrenClick(TObject *Sender)
{
  for(int i = MDIChildCount - 1; i >= 0; i--)
    MDIChildren[i]->Close();
}

void __fastcall TForm1::MyArrangeIconsClick(TObject *Sender)
{
  Form1->ArrangeIcons();
}

void __fastcall TForm1::MyCascadeClick(TObject *Sender)
{
  Form1->Cascade();
  }

Gracias a todos! :rolleyes:

ecfisa 19-10-2011 00:28:15

Hola Diego.

Te agrego dos opciones mas:
Código:

/* Mosaico Horizontal */
void __fastcall TForm1::tbTileHrzClick(TObject *Sender)
{
  TileMode = tbHorizontal;
  Tile();
}

/* Mosaico Vertical */
void __fastcall TForm1::tbTileVerClick(TObject *Sender)
{
  TileMode = tbVertical;
  Tile();
}

Un saludo. :)

Diego827 19-10-2011 20:06:41

Listo.
 
Hola,

Gracias a todos por sus respuestas, Saludos.

Diego827 24-02-2012 07:47:05

Parecere tonto... mas vale tarde que nunca
 
Hola amigos, solamente para comentarles:

Gracias por lo que me ayudaron en este hilo. Muy amables! Todavía me esta sirviendo!!!


La franja horaria es GMT +2. Ahora son las 00:50:48.

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