PDA

Ver la Versión Completa : Cerrar MDIChild cuando esta maximizada


Diego827
18-10-2011, 01:50:31
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
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.
Existe acaso un metodo que elimine todas las ventanas hijas de golpe?

procedure TMDIForm.btCloseAllChildsClick(Sender: TObject);
var
i: Integer;
begin
for i:= MDIChildCount-1 downto 0 do
MDIChildren.Close;
end;

Siempre que todos los MDIChildren tengan Action:= caFree en su evento [I]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:

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
Estimado ecfisa:

Encontre algo interesante y que te da la total razon:

/*
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:

/* 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
Hola,

Gracias a todos por sus respuestas, Saludos.

Diego827
24-02-2012, 07:47:05
Hola amigos, solamente para comentarles:

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