senpiterno
23-11-2004, 02:16:54
Hola amigos
Mi problema es el que menciono en el titulo, por defecto se que los formularios hijos MDI Child no se cierran a menos que en el evento onclose de este, asignemos a la variable Action el valor de cafree, que es precisamente lo que realizo, pero solo se cierra el primer MDI form y los demas al precionar la X para cerrar el formulario no hacen nada, es mas hasta el formulario contenedor deja de responer cuando lo intento cerrar...a continuacion coloco la forma en que creo los MDI Child y como los cierro...
Para crearlo:
Procedure TMenuPrincipal.PresionaEntrarMaestroUsuariosDelSistema;
Var
FormHijo:TMaestroUsuariosIndividual;
Begin
Try //Iniciamos el codigo de control de errores
//Funciones pre-carga formulario....
//Bloqueamos el repintado de la pantalla hasta que no se halla
//cargado completamente el formulario
LockWindowUpdate(Handle);
//Creamos el nuevo hijo
FormHijo:=TMaestroUsuariosIndividual.Create(Self);
//Asigna el caption que tendra el formulario
FormHijo.Caption:=ColocaNombreFormularios (CNFNomFormMaUsuariosSistema);
//Que los eventos de teclado se produscan primero en el formulario y despues en los controles
FormHijo.KeyPreview:=True;
//Dejamos que la pantalla se repinte, para mostrar en pantalla
//lo que el formulario muestra
LockWindowUpdate(0);
//Funciones pos-carga formulario....
Except //Se ha producido un error
On E:Exception Do
If (MensajesDeError(ErroresSistema(E), E, GloMsgErrorCargaFormDesdeMenuPrincipal,False)<> OpReintentar) Then Begin
CierraCualquierObjeto([FormHijo]);
Exit;//Salismos del procedimiento
End;//If
End;//on
End;
Para cerrarlos
Procedure TMaestroUsuariosIndividual.FormClose(Sender: TObject;
var Action: TCloseAction);
Begin
OperacionEnCurso:=OpSaliendo;//Se carga la operacion en curso
//Borramos el formulario de la lista de nombres abiertos
BorraNombreFormulariosEnLista(self.Caption);
//Cerramos accesos a datos
CierraCualquierObjeto([TUsuarios,DSUsuarios,TranLecturaUsuarios]);
//Salimos del formulario
Action:=cafree;
End;
Procedure TMaestroUsuariosIndividual.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
Begin
//Averiguamos si podemos cerrar el formulario
If SalirFormularioUsuarios Then Begin
CanClose:=True;//Cerranmos el formulario
End Else Begin
CanClose:=False;//No Cerranmos el formulario
End;
End;
esta puesto tal cual lo tengo...las funciones que aparecen al cerrar el form son comprovaciones para saber si es posible cerrar el formulario(en caso de que este en proceso un ingreso o una modificacion) o para descargar de memoria objetos creados dentro del form...
Se agradece cuanquier ayuda
Saludos....
Mi problema es el que menciono en el titulo, por defecto se que los formularios hijos MDI Child no se cierran a menos que en el evento onclose de este, asignemos a la variable Action el valor de cafree, que es precisamente lo que realizo, pero solo se cierra el primer MDI form y los demas al precionar la X para cerrar el formulario no hacen nada, es mas hasta el formulario contenedor deja de responer cuando lo intento cerrar...a continuacion coloco la forma en que creo los MDI Child y como los cierro...
Para crearlo:
Procedure TMenuPrincipal.PresionaEntrarMaestroUsuariosDelSistema;
Var
FormHijo:TMaestroUsuariosIndividual;
Begin
Try //Iniciamos el codigo de control de errores
//Funciones pre-carga formulario....
//Bloqueamos el repintado de la pantalla hasta que no se halla
//cargado completamente el formulario
LockWindowUpdate(Handle);
//Creamos el nuevo hijo
FormHijo:=TMaestroUsuariosIndividual.Create(Self);
//Asigna el caption que tendra el formulario
FormHijo.Caption:=ColocaNombreFormularios (CNFNomFormMaUsuariosSistema);
//Que los eventos de teclado se produscan primero en el formulario y despues en los controles
FormHijo.KeyPreview:=True;
//Dejamos que la pantalla se repinte, para mostrar en pantalla
//lo que el formulario muestra
LockWindowUpdate(0);
//Funciones pos-carga formulario....
Except //Se ha producido un error
On E:Exception Do
If (MensajesDeError(ErroresSistema(E), E, GloMsgErrorCargaFormDesdeMenuPrincipal,False)<> OpReintentar) Then Begin
CierraCualquierObjeto([FormHijo]);
Exit;//Salismos del procedimiento
End;//If
End;//on
End;
Para cerrarlos
Procedure TMaestroUsuariosIndividual.FormClose(Sender: TObject;
var Action: TCloseAction);
Begin
OperacionEnCurso:=OpSaliendo;//Se carga la operacion en curso
//Borramos el formulario de la lista de nombres abiertos
BorraNombreFormulariosEnLista(self.Caption);
//Cerramos accesos a datos
CierraCualquierObjeto([TUsuarios,DSUsuarios,TranLecturaUsuarios]);
//Salimos del formulario
Action:=cafree;
End;
Procedure TMaestroUsuariosIndividual.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
Begin
//Averiguamos si podemos cerrar el formulario
If SalirFormularioUsuarios Then Begin
CanClose:=True;//Cerranmos el formulario
End Else Begin
CanClose:=False;//No Cerranmos el formulario
End;
End;
esta puesto tal cual lo tengo...las funciones que aparecen al cerrar el form son comprovaciones para saber si es posible cerrar el formulario(en caso de que este en proceso un ingreso o una modificacion) o para descargar de memoria objetos creados dentro del form...
Se agradece cuanquier ayuda
Saludos....