| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
pampa Lt JG

Registrado: 16 Jun 2004Mensajes: 58Ubicación: Mar del Plata - Argentina
|
Publicado: Sab 17 Jul, 2004 12:57 am Asunto: Show()/ShowModal() |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 17 Jul, 2004 6:50 am Asunto: |
|
|
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] _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 17 Jul, 2004 6:51 am Asunto: |
|
|
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 _________________
 |
|
| Volver arriba |
|
 |
pampa Lt JG

Registrado: 16 Jun 2004Mensajes: 58Ubicación: Mar del Plata - Argentina
|
Publicado: Jue 22 Jul, 2004 1:19 am Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 22 Jul, 2004 5:11 am Asunto: |
|
|
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.. _________________
 |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Jue 22 Jul, 2004 3:16 pm Asunto: |
|
|
| Ok, gracias; comprendido. |
|
| Volver arriba |
|
 |
cecito Capt

Registrado: 25 Nov 2003Mensajes: 164Ubicación: Arequipa - Perú
|
Publicado: Jue 22 Jul, 2004 3:30 pm Asunto: |
|
|
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 |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Jue 22 Jul, 2004 9:59 pm Asunto: |
|
|
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
en el OnClose del form creado dinámicamente.
atte _________________ Adrián
http://adrian.org.ar |
|
| Volver arriba |
|
 |
pampa Lt JG

Registrado: 16 Jun 2004Mensajes: 58Ubicación: Mar del Plata - Argentina
|
Publicado: Vie 23 Jul, 2004 12:49 am Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 23 Jul, 2004 12:49 am Asunto: |
|
|
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... _________________
 |
|
| Volver arriba |
|
 |
|