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 

Crear ventanas y destruir

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Crear ventanas y destruir Responder citando

Como podemos crear y destruir ventanas, hay alguna otra forma de crear muchas ventanas sin usar las MDIChild ?
Ventanas que se visualizen con ShoW para poder tener varias abiertas.
Como las liberamos de memoria después?

Estoy confuso. quiero hacer una aplicación con posibilidad de abrir N ventanas de varios tipos y desde varios formularios. Una sola MDIForm me parece poco.
Gracias.
Volver arriba
Mensaje    Asunto: Responder citando

¡Hola!

No se si te he entendido bien. Si lo que quieres es crear tantos formularios como desees lo puedes hacer así:

TForm *NuevoFormulario = new TForm(this);

Luego ajustas sus propiedades (Name, Parent, Caption, etc) y a usarlo. Si quieres que pertenezca a otro componente que no sea el formulario en el que estás, cambia el "this" por el nombre del componente al que quieres que pertenezca.

Para destruirlo usa la instruccion DELETE.

Salu2.
Volver arriba
Mensaje    Asunto: Responder citando

Lo mejor es que sean ellas mismas las que liberen a la memoria cuando se cierran. Para ello debes poner lo siguiente en el evento Close de las ventanas no modales.

Acticon = caFree;

La ayuda de builder muestra:

caFree: The form is closed and all allocated memory for the form is freed.
Volver arriba
Mensaje    Asunto: Gracias Responder citando

Si he entendido bien crear i destruir Forms es tan facial como

TForm *Form;
Form= new TForm(this);//crear
Form->Show();

y dentro del OnClose() de Form poner action=caFree;

De esta forma se destruyen las ventanas?
Que ventaja tienen entonces las ventanas Hijas?
Volver arriba
Mensaje    Asunto: Responder citando

I gracias por vuestras respuestas!!!
Muchas Gracias.
Volver arriba
Mensaje    Asunto: Responder citando

Para completar esta respuesta:

Si geneas ventanas dinamicamente surge otro problema

¿Como saber si esta creada? Esto es para que el usurio no habra mas de una ventana de un tipo.

Dos Soluciones

1.- Deshabilitar el acceso a la ventaan , menu, boton etc

2.-


TfrmTuVentana *frmTuVentana;
if(frmTuVentana==NULL) // NO ESTA EN MEMORIA
{
frmTuVentana= new TfrmTuVentana(this);//crear
frmTuVentana->Show();
}

// Ademas en OnClose de la misma /// OJO

Action=caFree; // Como vimos
frmTuVentana=NULL;


¿Comentarios?
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Gracias de nuevo Responder citando

Gracias , siguiendo con el tema de la gestión de ventanas.
Teniendo una ventana contenedor fsMDIForm y varios tipos de ventanas fsMDIChild, y gracias a los comentarios, sabiendo ya del cierto como crear y destruir ventanas.

Me encuentro que al intentar crear una ventana no fsMDIchild y enseñarla con Show() si es hija de la principal(fsMDIForm) no recibe el foco y si sus componentes!!! y si no la hago hija me desaparece claro!!!

Como puedo pues combinar ventanas MDIChild y Forms normales?

Gracias.
Volver arriba
Mensaje    Asunto: Responder citando

ShowModal
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Tengo dos problemas:

1º Que cuando tengo abierta una ventana, puedo abrir otra y otra y otra (parece lo de duracel),como puedo evitarlo, es decir que sólo pueda abrir una. He probado el código de Touchsoftwares y no me funciona. Alguna otra sugerencia???


2º Como Puedo cerrar la ventana hija desde cualquier evento por ejemplo al hacer click sobre un Button, sin darle a la "X" de cerrar.


Gracias de Antemano y Saludos.
Volver arriba
Mensaje    Asunto: Responder citando

creo que esto te puede servir... a pepito
no lo he probado, en donde estoy no hay builder.. asi que pruebalo haber y me comentas....
eso lo encontre una ves en un foro de delphi..... algo asi por que le estoy echando memoria.... y si funciona....

bool ExisteForm(TForm *a )
{
int i;
Tform *x;
bool res = false;
for (i = 0;i<Screen->FormCount;i++)
{
x = Screen->Forms[i];
if(TFormClass(x) == TFormClass(a))
{
res=true;
break;
}

}
return res;

}
//----------------------------------------------------------------------------------
//aca es donde se crea la ventana......
//la variable Form4 es una variable global.....

if (!ExisteForm(Form4))
Form4 = new TForm4(this);//aca no estoy seguro...hay que colocar como se crea una ventana
else
{
Form4->WindowState = wsnormal;
Form4->BringToFrom;
}


para cerrar la ventana se hace con close
po ejemplo en el evento click de un boton en ese formularo colocas
Close();

creo que tambien lo puedes cerrar del padre con
Form4->Close();
no se si hay que verificar si existe un form4 creado para poder cerrarlo....
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

1º Que cuando tengo abierta una ventana, puedo abrir otra y otra y otra (parece lo de duracel),como puedo evitarlo, es decir que sólo pueda abrir una. He probado el código de Touchsoftwares y no me funciona. Alguna otra sugerencia???

En primera tienes hecha tu ventana y desde c ++ builder en el menu
Proyect / Options desactivas que no se genere al iniciar el programa.

Luego incluyes el archivo de cabecera en el form principal de todas las forms hijas que vas a crear dinamicamente. ¿ok?

Cuando las creas con el codigo



2º Como Puedo cerrar la ventana hija desde cualquier evento por ejemplo al hacer click sobre un Button, sin darle a la "X" de cerrar.


Gracias de Antemano y Saludos.

Código:
rmMain->Menu=NULL;
if(frmVentaComidaRapida==NULL)
    frmVentaComidaRapida=new TfrmVentaComidaRapida(this);


(Ejemplo tomado de unos de mis proyectos en funcionamiento)

La venta se genera, pero dentro de la forma frmVentaComidaRapida en su evento OnCLose escribes

Código:

Action=caFree;
frmVentaComidaRapida=NULL;


solo crearas una nueva instanacia del objeto tFrmVentadeCOmidaRapida si sus apuntador es NULL y e snulo si no ha sido "creado" y lo HACES nulo cuando los "desapareces" de la memoria caFree, pero tienes que ser explicito apuntado a NULL

En la repsuesta dos, solo anexas Close() en el codigo donde quieras que se cierre la forma
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor 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.