![]() |
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!. |
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... |
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. |
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! |
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... |
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 |
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!. |
Si pones el código que estás usando, te podríamos ayudar mejor. Usa los tags [ delphi ] [ /delphi ] (sin espacios entre los corchetes) para que tu código se entienda mejor.
Saludos... |
la incompatibilidad de tipos es imposible, es caFree de todas formas, mirando en la ayuda lo ves rapidamente:
Por otro lado, el acceso a memoria lo tienes que comprobar tú antes de cerrar la ventana !!! Cerrar la ventana activa: Cerrar todas las ventanas hijas
Adeusss |
oks, pego parte del codigo:
tengo, ahora, dos tres ventanas, una con formstyle=fsMDIForm, y dos con fsMDIChild las llamo:
para ventana 1: rpvlaunch(0); para ventana 2: rpvlaunch(1); la variable bandera se supone que es para no lanzar la ventana dos veces. en el OnQueryClose de las ventanas hijas:
Probe todo lo que me sugerieron y siguen esos dos problemas. Gracias por su ayuda!. |
Cita:
// Saludos |
:|no se a que se refiera, muy apenas soy novato en delphi, se programar pero éste es mi primer lenguaje visual.
los componentes que uso son: >zeoslib[Tzconnection y tzquery] >tdblookuplist >tdartasource >tshelltreeview y otros bastante comunes: mainmenu, popupmenu, edit, label, groupbox, memo, bitbutton, etc ¿Entonces que debo hacer?? Gracias!. |
¿Qué versión de las Zeos estás usando?
// Saludos |
es zeosdbo-6.5.1-alpha, en delphi 7
en las ventana padre tengo el tzconnection y en las ventanas hijas las tzquery's |
Bueno, pues para empezar, independientemente de que sea o no la causa del problema, deja de usar versiones alpha de lo que sea. Las versiones alpha no están lista para producción y normalmente tienen aún muchos errores. Usa en su lugar la versión 6.1.5 que fue la última estable que sacó ZEOS.
// Saludos |
Hola,
Quizas no tenga nada que ver, pero resolvi un problema similar utilizando Release para las MDIChild. Código:
procedure TMdiform1.FormClose(....); |
:D Gracias!, con release si funciono!:D
De igual forma Gracias a todos por su tiempo y ayuda :D |
La franja horaria es GMT +2. Ahora son las 05:53:27. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi