FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
formStyle=fsMDIForm, formStyle=fsMDIChild == "Abstract Error"
Hi!, bien, estoy haciendo un programa que corra en subventanas, tengo la ventana "padre" con el formstyle a fsMDIForm, y las hijas con fsMDIChild, en el proyecto las movi del "formcreate" automático, las creo en momento de ejecución ( Application.CreateForm(Tnombreventana, nombreventana); ), se supone que es así por ahorro de recursos, abro las ventanas y pongo una bandera (variable) a verdadero, esto para no lanzar la ventana dos veces, cuando se cierra la ventana pongo la vandera a falso y destruyo la ventana (nombreventana.destroy; ). Aquí es cuando sale el problema, cuando cierro la ventana me dan 2 errores, uno, el más común "Abastrac Error" y otro error de acceso a memoria. Claro, estos errores se dan uno u otro, no simultáneos. Cuando abro y cierro la ventana varias veces deja de dar error.
¿Alguien sabe porque pasa esto? y sobre todo, ¿como puedo repararlo?. De antemano, Gracias!. |
#2
|
|||
|
|||
El problema es que estás usando nombreventana.Destroy para destruir las ventanas. Si lees la ayuda de Delphi, ahí dice que para liberar un objeto de memoria se use el método Free y no Destroy.
Saludos... |
#3
|
|||
|
|||
hi, gracias por tu ayuda.
Ya probe con el FREE y me dan los mismos errores :| Sabes otra posible causa?, este proyecto lo comenze en delphi9 e igual tenia ese error, ahora lo estoy trabajando en delphi7. |
#4
|
|||
|
|||
Cita:
Sobre tus errores, delphi.com.ar ya comentó algo sobre los "Abstract Error". Sobre los errores de acceso a memoria, verifica que no se esté tratando de usar o liberar un objeto que, o no se ha creado o ya fue liberado. Saludos... |
#5
|
||||
|
||||
Hace bastante tiempo me volvían locos esos errores, simplemente haz esto:
Las ventanas sigue creandolas como lo haces ahora. Las llamadas a Destroy no debes hacerlas; es más ahora no te hacen falta, simplemente llama al método NombreVentana.Close o bien, si quieres acceder desde la forma MDI: FormaMdi.MdiChildren[i].Close Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
|||
|
|||
hi, probe con lo de:
action:=catfree nombreventana:=nil me da un error, que son incompatibles los tipos, con lo de formamdi.mdichildren[] probe con cero y uno, ahora sólo marca error de memoria. Gracias!. |
#7
|
||||
|
||||
Los "Abstract Error" se producen cuando se llama a un método abstracto que no ha sido implementado, si tus forms heredan de TForm y no has definido métodos abstractos, yo buscaría el problema por los componentes que has agregado a este form, o clases que tu te encargues de liberar "a mano".
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
|
|
|