 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Jue 11 Mar, 2004 7:50 pm Asunto: Problema de llamar un Form en Oncreate del Main |
|
|
Buen día a todos,
quiero saber como mando llamar, digamos, el Form3, cuando se está creado en MainForm (Form1), pongo en el evento Oncreate: Form3->Show() o Form3->ShowModal(), pero me manda un error.
Lo que quiero hacer es: Tenog el MainForm pero a última hora se quiere meter un Password antes de entrar a la forma principal.
Que puedo hacer???? Y a ver si me pueden poner un ejemplo, por favor.
De antemano Gracias. _________________ Sin pena, ni gloria |
|
| Volver arriba |
|
 |
-Spencer- Capt

Registrado: 03 Mar 2003Mensajes: 160Ubicación: Armenia - Colombia
|
Publicado: Jue 11 Mar, 2004 9:42 pm Asunto: Re: Problema de llamar un Form en Oncreate del Main |
|
|
podrias hacer algo asi. En el cpp del proyecto.
si tienes cuatro formas, y la forma 4 es la que va a pedir la contraseña entonces tienes que crearla antes que todas las otras,
...
Application->Initialize();
Form4 = new TForm4(Application);
Application->ProcessMessages();
Form4->Show();
Application->ProcessMessages();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
Application->CreateForm(__classid(TForm3), &Form3);
Application->Run();
...
de esta manera se verá el form indicado para pedir la clave
Espero que te sirva de algo _________________ "Cállate, o di algo mejor que el silencio" |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Vie 12 Mar, 2004 10:00 am Asunto: |
|
|
Hola, voy a hacer alguna aclaración al texto de -Spencer-:
En primer lugar, para que se reconozca el Form4 en el cpp del proyecto tendrás que indicárselo con #include "Unit4.h".
Luego no te recomiendo usar el método Form4->Show() si no el ShowModal(). Así te aseguras que se "utiliza" antes de seguir adelante con tu programa.
Por último, y suponiendo que tu formulario principal sea Form1, en su cpp deberías incluir la cabecera del Form4 (#include "Unit4.h") para poder quitarte de encima el Form4 una vez lo hayas usado (es de esperar que ya no lo necesites por lo que ¿para qué quieres seguir teniéndolo en memoria?). Un buen momento sería el de la presentación del formulario principal: | Código: | void __fastcall TForm1::FormShow(TObject *Sender)
{
if (Form4) //Si está activada el Form4 lo "cierra"
{
... //Antes de cerrarlo quizá quieras "leer" los datos del usuario
delete Form4;
Form4 = NULL;
}
} |
Si lo único que quieres es mostrar un formulario desde otro sólo necesitas incluir su cabecera (releyendo tu pregunta sería escribir #include "Unit3.h" en Unit1.cpp). El rollo que te hemos metido entre -Spencer- y yo es útil cuando quieres ahorrar memoria en la ejecución de tu programa (práctica bastante saludable, por cierto).
Suerte. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 12 Mar, 2004 3:59 pm Asunto: |
|
|
Intenta en el evento, OnActivate del Form, lo siguiente
| Código: |
TFAcceso *AC = new TFAcceso(this);
switch(AC->ShowModal()){
case mrOk:
this->SetFocus();
break;
case mrCancel:
Application->Terminate();
break;
};
delete AC;
|
Donde AC, es el Formulario en forma Modal, y dependiendo de el resultado, verificas, en este caso si se cierra termino la apliacion..
saludos..
bye _________________
 |
|
| Volver arriba |
|
 |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Sab 13 Mar, 2004 12:02 am Asunto: |
|
|
Buen dia,
gracias atodos por la ayuda, pero, CEsar... puse el código exactamente como lo pusiste pero me marca el sig. error:
Undefined symbol 'TFAcceso'
Improper use of TForm3
Type name expected
Aunque para el segundo error ya lo puse como Form, y no como TForm.
Podrías ayudarme ???'.[/url] _________________ Sin pena, ni gloria |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 13 Mar, 2004 12:31 am Asunto: |
|
|
Si mira, el FAcceso, es el Nombre del Form que quieres abrir, es decir si tu form de acceso se llama, Acceder, pues el dato quedaria asi..
| Código: |
FAcceder *AC = new TFAcceder(this);
switch(AC->ShowModal()){
case mrOk:
this->SetFocus();
break;
case mrCancel:
Application->Terminate();
break;
};
delete AC; |
espero que ahora si te sirva..
si dime donde esta el fallo y lo corregimos rapido.. _________________
 |
|
| Volver arriba |
|
 |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Sab 13 Mar, 2004 3:38 pm Asunto: |
|
|
ok, Cesar eso, ya me quedó bien,ahora, dos cosas:
- Al momento de correrlo, primero aparace, el Formulario1 (que es el Main original) y despues el formulario para acceso, como hago que solo me salga el formulario de acceso, sin que se vea el formulario1.
- En el formulario3 (para acceder), escriben su password y dan enter, lo que hago es:
Mando la información del usuario al formulario1 y despues cierro la forma3 (acceder), pero me manda un error de Violación; me puedes decir como lo tengo que cerrar, o si no lo tengo que cerrar, !!! o que diablos tengo que hacer ¡¡¡
Gracias de Antemano. _________________ Sin pena, ni gloria |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Sab 13 Mar, 2004 6:27 pm Asunto: |
|
|
Lo que pides está más en la línea de lo que te sugirió -Spencer- que de lo de César, pero al fin y al cabo deberías usar una mezcla de ambas ideas.
Primero deberías crear el formulario de Acceso en el cpp del proyecto, y ejecutar también allí su ShowModal().
Luego cambias la variable del switch que te propone César (AC->ShowModal()) por (AC->ModalResult).
En el caso de haber cancelado la entrada (mrCancel) el código de César es el apropiado.
Si se ha aceptado la entrada (se ha escrito un usuario y su contraseña) entrarás en mrOk, momento en el que debes comprobar que los datos son correctos. Si no es así puedes terminar la aplicación o volver a mostrar el formulario de acceso (cosa tuya). Si los datos de acceso son correctos ya puedes mostrar el formulario1.
Respecto al error que te da, sería mejor que postees el código. Realmente el formulario3 no lo cierras tú, lo ha cerrado el usuario de tu programa, tú sólo lo borras (delete) después de lo cual no debes intentar usarlo, pues no existe. |
|
| Volver arriba |
|
 |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Lun 15 Mar, 2004 8:11 pm Asunto: |
|
|
Tienes razón Enrique, ya lo i mplementé y quedó poca m%&$#, ahora; en dado caso que metan mal su pass.
Que instruccion le doy para que termine la aplicaion, si que entre al Form1 (mainForm Principal), Por que le dor
Application->Terminate();
pero como tengo el form2 para que se vaya mostrando poco apoco; se muestra y después termina.
Gracias de Antemano. _________________ Sin pena, ni gloria |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Lun 15 Mar, 2004 8:42 pm Asunto: |
|
|
| Supongo que lo mejor sería hacerlo en el WinMain(), que es donde tienes el CreateForm del resto de formularios. |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|