Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problemas con formas MDI

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problemas con formas MDI Responder citando

Hola a todos los del foro, y antes ke nada gracias por tomarse la molestia de leer mi tema...

Tengo un gran problema y es el siguiente...

Resulta que estoy trabajando en una aplicacion la cual utiliza formas MDI, todo estaba funcionando al pie de la letra, tenia mi forma principal de tipo MDI Form, y las demas que dependian de ellas como MDI Child, todo funcionaba sin ningun problema....

Pero sucede, que en mi aplicacion yo kiero reestringir el acceso a ciertos usuarios unicamente, por lo cual hice una forma, que es la que se encargaria de eso precisamente, fue aqui cuando iniciaron los problemas, el cual aun no puedo solucionar....

Agregue una forma, de tipo fsNormal, esta forma se crea y se muestra en el evento onCreate de la forma principal, como la muestro de manera Modal, impide el acceso a cualkier otra forma, hasta ke el usuario teclee un username u password correcto, la forma se cierra y me permite el acceso, si el usuario presiona cancelar, la aplication termina.

Hasta aqui todo funciona bien, hace lo que pido, pero... cuando el usuario pone bien su username, la forma se cierra, pero se vuelve a crear, es decir, se muestra dos veces, pero la segunda vez que se muestra la forma y el usuario pone correctamente su username nuevamente, la forma se cierra obviamente pero termina la aplicacion tambien, lo unico ke pude hacer para solucionar esto, es ponerle en el evento onClose de esta forma, Action = caFree; de esta manera si se cierra la forma de sesion y ya me permite el acceso, pero se alcanza a notar de todas maneras que al cerrarse la forma, como ke automaticamente se vuelve a generar, pero se destruye al instante, es algo medio raro....

En fin.... hasta aqui ya tenia todo bien.... ya la forma de sesion se cerraba cuando el usuario tecleaba bien sus datos y me permitia el acceso....

Pero ahora el problema es... que cuando ya se ingresa a la aplicacion, y se intenta abrir una forma MDIChild, el programa marca un error con elsiguiente mensaje: "CANNOT CREATE FORM. NO MDIFORMS ARE CURRENTLY ACTIVED"; es decir, marca como si no existiera ninguna forma MDIForm activada, siendo ke si existe y es la forma principal, el cpodigo ke puse en el evento onCreate es el siguiente....

Código:

    if(!frmSesion)
    {
      Application->CreateForm(__classid(TfrmSesion),&frmSesion);
    }
  frmSesion->ShowModal();

sin embargo, si desactivo este evfento o simplemente pongo el codigo como comentarios para ke no se compile... el programa al ejecutarlo obviamente no me pide acceso al programa, pero todas las formas MDIChild si se pueden ejecutar sin ningun problema.... Entonces es al parecer esta nueva forma la que esta ocasionando el problema.... pero sincersamente no se como solucionar....

Sucede ke hace tiempo realice una aplicacion la cual tamben llevaba esta forma para iniciar sesion, y me funcionaba perfectamente, sin niongun problema; ya en la desesperacion lo que hice como prueba fue tomar la otra forma del protro proyefto, agregarla a este, y ke fuera mi forma para iniciar sesion, y oh sorpresa, sucedio lo mismo... en este proycto me marca ese error siendo ke en otro no.... lo cual me indica que no es la forma la ke tiene el problema, sino algo en la aplicacion o en la forma principal qiue estoy haciendo mal...

Espero que alguen pueda darme algun consejo sobre que hacer para solucionar este problema.... se los agradeceria demasiado....

Muchas gracias y mil disculpas por kitarles su siempre....

Ciao Embarassed
Volver arriba
Mensaje    Asunto: Responder citando

Yo estoy programando también una aplicación MDI que gestiona usuarios y la forma con que lo hago no me ha dado ningún problema, voy a ver si soy capaz de explicarte como lo he hecho:

El Form pricipal está claro que debe ser un MDIForm y los secundarios MDIChild, pero al margen de todo esto lo que yo hago es en el evento OnShow del Form principal creo uno al estilo normal que es el que utilizo para que el usuario introduzca su nombre y su contraseña, digo creo porque lo tengo quitado de la lista Auto-Create Forms de las opciones del proyecto:

if (!ModuloDatos->TabUsuarios->IsEmpty()){
frmClave = new TfrmClave(this);
frmClave->Width = 274;
frmClave->Height = 181;
frmClave->ShowModal();
delete frmClave;
}
Como puedes ver los datos de usuarios y contraseñas los gestiono en una tabla de la base de datos.
Este formulario que muestro para que el usuario introduzca un nombre y una contraseña contiene lógicamente dos botones (Aceptar y Cancelar), en Cancelar el código es muy simple:

frmPrincipal->Close();

y en Aceptar he puesto lo siguiente:

int i = ModuloDatos->TabUsuarios->RecordCount;
AnsiString usuario = Edit1->Text;
AnsiString clave = Edit2->Text;
bool coinciden = false;

for (int a=0;a if ((ModuloDatos->TabUsuariosNombre->Text==usuario)&&
(ModuloDatos->TabUsuariosContrasena->Text==clave)){
coinciden = true;
}
else {
coinciden = false;
ModuloDatos->TabUsuarios->Next();
}
}
if (coinciden==true){
ShowMessage("Bienvenido "+usuario);
frmClave->Close();
frmPrincipal->user = ModuloDatos->TabUsuariosCodito->Value;//Asignamos el valor a la variable user del frmPrincipal.
frmPrincipal->Edit1->Text = usuario;
}
else {
Application->MessageBoxA("El usuario o la contraseña no son válidos, la aplicación\n"
"se cerrará ahora.","Datos incorrectos",MB_OK | MB_ICONSTOP);
frmPrincipal->Close();
}

Es muy posible que no necesites tantas variables como yo pero bueno, las dejo por si te intuyen algo.
Yo de esta forma no tengo ningún problema, espero haber ayudado.
Saludos.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Gracias por tu ayuda Responder citando

HOLA.... MUCHISIMAS GRACIAS POR TU AYUDA.....

TE AGRADEZCO TODA LA EXPLICACION QUE ME DISTE, AUNKE LA UNICA PARTE QUE UTILICE FUE EL CREAR LA FORMA EN TIEMPO DE EJECUCCION

frmSesion = new TfrmSesion(this);

CON ESO YA SE ABRE LA FORMA Y NO ME MARCA NINGUN ERROR CON LAS FORMAS MDI... COMO SIEMPRE HE CREADO LAS FORMAS EN MODO DE EJECUCION CON EL METODO CreateForm DE LA CLASE TAPLICATION, NO SE ME HABIA OCURRIDO CREARLA COMO CUALKIERO PUNTERO.. JEJEJE

PERO MUCHISIMAS GRACIAS POR TU AYUDA...

CIAO
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.