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 

Show()/ShowModal()

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Show()/ShowModal() Responder citando

Consulta Show()/ShowModal()
Cuando trabajo con Forms Modaless me estoy encontrando con la "obligación" de que sea un formulario "Auto-Create Form"; ya que no encuentro (desconozco) la forma de liberarlo (delete Form1;) una vez cerrado; ya que si al formulario lo abro en modo "Modal", lo hago de la sig manera:

Form1=new TForm1(this);
Form1->ShowModal();
delete Form1;

La pregunta es como hago esto mismo pero utilizando Show y no ShowModal. O sea:

Form1=new TForm1(this);
Form1->Show();

El asunto es donde escribo esto: "delete Form1;", claro está sin tener que esperar a que se autodestruya cuando cierre el formulario desde donde lo llame. Necesito que se libere la memoria una vez cerrado el Form1.

Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

pueden verse varias cosas.. la primera para contestar tu pregunta...
donde utilizas y para que un Formulario de este tipo..,

y dos prueba con el siguiente codigo

[code#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1; // mi Formulario Principal
// creas la instancia para conocerlo dentro de este archivo
// aun que puedes meterlo dentro de la clase
TForm *pForm;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// puse un boton, para abrir dicho formulario.
//creas un Form derivado de TForm2
pForm = new TForm2(static_cast<void *>(NULL));
pForm->Show();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
// si esta activo, se libera, desde otro boton
if(pForm){
delete pForm;
pForm = NULL; // para no crear una excepcion
}
}
//---------------------------------------------------------------------------
[/code]
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

perdon, no muy se entienede


Código:

#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1; // mi Formulario Principal
// creas la instancia para conocerlo dentro de este archivo
// aun que puedes meterlo dentro de la clase
TForm *pForm;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // puse un boton, para abrir dicho formulario.
    //creas un Form derivado de TForm2
    pForm = new TForm2(static_cast<void *>(NULL));
    pForm->Show();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    // si esta activo, se libera, desde otro boton
    if(pForm){
        delete pForm;
        pForm = NULL; // para no crear una excepcion
    }
}
//---------------------------------------------------------------------------


ahora si, fallo de trascripcion je je
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Lo que estoy necesitando es saber en que momento hacer la liberación de la memoria de Form1, pero no para hacerlo manualmente con un button, osea que se autolibere al cerrarse el Form1:
Poseo dos Form, Form0 y Form1, desde el Form0 invoco a Form1:
si lo hago en forma modal,todo bien, ya que se que al delete he de llamarlo inmediatamente luego de la salida del ShowModal:

Form1=new TForm1(this);
Form1->ShowModal();
delete Form1;

ahora bien si lo que hago es llamarlo en forma modaless:

Form1=new TForm1(this);
Form1->Showl();

he aquí mi problema, no se donde invocar al delete, pero no quiero que la liberación la haga el usuario a través de un control.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Al parecer no comprendiste bien, el concepto.. la liberacion del form, se realiza automaticamente, cuando lo llamas desde un bloque de sentencias { ...codigo ....}

en el ejemplo anterior.. estas creando la instancia de la ventana, dentro del boton1, la habres, si lo que quieres es que se elimine, despues del Evento Show(), simplemente, sal del bloque de sentencias el compilador automaticamente, llama al destructor del form.. cuando este ya no te sirve por lo tanto se libera la memoria..

ejemplo
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TForm *pForm = new TForm2(static_cast<void *>(NULL));
    pForm->Show(); // creas y pasas el focus a la ventana..
                             // cuando la cierres automaticamente estas
                            // liberando la memoria.
}


pero si te explicas, con mas detalle.. puedo entenderte mejor...

saludos..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Ok, gracias; comprendido.
Volver arriba
Mensaje    Asunto: Responder citando

necesitas colocar en el evento OnClose de tu segundo formulario la siguiente línea:
Código:
{
  Action = caFree;
}

de esta forma cuando cierras el formulario automaticamente se autodestruye[/code]
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

César, como bien dice Cecito, este código no libera la memoria del form,

Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TForm *pForm = new TForm2(static_cast<void *>(NULL));
    pForm->Show(); // creas y pasas el focus a la ventana..
                             // cuando la cierres automaticamente estas
                            // liberando la memoria.
}



sino que debes agregar

Código:

Action=caFree;


en el OnClose del form creado dinámicamente.



atte
_________________
Adrián

http://adrian.org.ar
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Espectacular, eso es lo que necesitaba.
Gracias a todos.
Cesár la próxima trataré de ser más claro en la consulta. A veces uno quiere consultar algo sencillo y por querer ser claro complica la cosa.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

tal vez se me paso.. pero se asume.. que al crearlo de la manera como se esta haciendo.. debe contener el Action = caFree, ya que si no lo hace..
este no se borra..

pero gracias por la observacion.. le dieron solucion al post...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
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.