| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
iluso Invitado
|
Publicado: Vie 14 Feb, 2003 9:48 am Asunto: Crear ventanas y destruir |
|
|
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 |
|
 |
tecno Invitado
|
Publicado: Vie 14 Feb, 2003 2:45 pm Asunto: |
|
|
¡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 |
|
 |
Invitado
|
Publicado: Vie 14 Feb, 2003 3:41 pm Asunto: |
|
|
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 |
|
 |
iluso Invitado
|
Publicado: Sab 15 Feb, 2003 10:20 am Asunto: Gracias |
|
|
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 |
|
 |
iluso Invitado
|
Publicado: Sab 15 Feb, 2003 10:21 am Asunto: |
|
|
I gracias por vuestras respuestas!!!
Muchas Gracias. |
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Dom 16 Feb, 2003 11:44 pm Asunto: |
|
|
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 |
|
 |
iluso Invitado
|
Publicado: Lun 17 Feb, 2003 9:32 am Asunto: Gracias de nuevo |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Lun 17 Feb, 2003 6:41 pm Asunto: |
|
|
ShowModal _________________ Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc
http://www.touchsoftwares.com |
|
| Volver arriba |
|
 |
Pepito Invitado
|
Publicado: Lun 17 Feb, 2003 9:28 pm Asunto: |
|
|
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 |
|
 |
elgatop Cdt

Registrado: 26 Ene 2003Mensajes: 14
|
Publicado: Lun 17 Feb, 2003 10:59 pm Asunto: |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Mar 18 Feb, 2003 6:48 am Asunto: |
|
|
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 |
|
 |
|