Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-06-2005
Essato Essato is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
Essato Va por buen camino
Question 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!.
Responder Con Cita
  #2  
Antiguo 15-06-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
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...
Responder Con Cita
  #3  
Antiguo 15-06-2005
Essato Essato is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
Essato Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 15-06-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 15-06-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Cita:
Empezado por Essato
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.
Aún así, siempre que quieras liberar un objeto que tu creaste, usa el método Free.

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...
Responder Con Cita
  #6  
Antiguo 15-06-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Hace bastante tiempo me volvían locos esos errores, simplemente haz esto:

Código Delphi [-]
procedure Tform1.FormClose(....);
begin
  action := cafree;
  nombreVentana := nil;
end;

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.
Responder Con Cita
  #7  
Antiguo 15-06-2005
Essato Essato is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
Essato Va por buen camino
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!.
Responder Con Cita
  #8  
Antiguo 15-06-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
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...
Responder Con Cita
  #9  
Antiguo 15-06-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
la incompatibilidad de tipos es imposible, es caFree de todas formas, mirando en la ayuda lo ves rapidamente:
Código Delphi [-]
  TCloseAction = (caNone, caHide, caFree, caMinimize);

Por otro lado, el acceso a memoria lo tienes que comprobar tú antes de cerrar la ventana !!!


Cerrar la ventana activa:
Código Delphi [-]
if ActiveMDIChild <> nil then
  ActiveMDIChild.Close
Cerrar todas las ventanas hijas
Código Delphi [-]
for i:=0 to mdichildcount - 1 do
  mdiChildren[i].Close;

Adeusss
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 15-06-2005
Essato Essato is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
Essato Va por buen camino
oks, pego parte del codigo:

tengo, ahora, dos tres ventanas, una con formstyle=fsMDIForm, y dos con fsMDIChild

las llamo:

Código Delphi [-]
procedure rpvLaunch(rpvtwin:integer);
begin
    if (rpvtwin=0) AND (rpvWin[0]=FALSE) then
    begin
        Application.CreateForm(TrpvGenre, rpvGenre);
        rpvWin[0]:=TRUE;
    end
    else if (rpvtwin=1) AND (rpvWin[1]=FALSE) then
    begin
        Application.CreateForm(TrpvAddMedium, rpvAddMedium);
        rpvWin[1]:=TRUE;
    end;
end;

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:

Código Delphi [-]
rpvWin[0]:=FALSE;
rpvGenre.Free;

Probe todo lo que me sugerieron y siguen esos dos problemas.
Gracias por su ayuda!.
Responder Con Cita
  #11  
Antiguo 15-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Essato
Probe todo lo que me sugerieron y siguen esos dos problemas.
¿Todo? ¿Ya revisaste lo que te indicó Federico? El error de acceso a memoria muy posiblemente sea consecuencia del Abstract Error. ¿Tienes alguna componente de terceros en tus formularios?

// Saludos
Responder Con Cita
  #12  
Antiguo 15-06-2005
Essato Essato is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
Essato Va por buen camino
:|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!.
Responder Con Cita
  #13  
Antiguo 15-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Qué versión de las Zeos estás usando?

// Saludos
Responder Con Cita
  #14  
Antiguo 15-06-2005
Essato Essato is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
Essato Va por buen camino
es zeosdbo-6.5.1-alpha, en delphi 7

en las ventana padre tengo el tzconnection y en las ventanas hijas las tzquery's
Responder Con Cita
  #15  
Antiguo 15-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #16  
Antiguo 15-06-2005
Avatar de Kreyser
Kreyser Kreyser is offline
Miembro
 
Registrado: ago 2004
Ubicación: Barcelona
Posts: 114
Poder: 20
Kreyser Va por buen camino
Hola,

Quizas no tenga nada que ver, pero resolvi un problema similar utilizando Release para las MDIChild.

Código:
procedure TMdiform1.FormClose(....);
begin
  Mdiform1.Release;
end;
Espero aporte algo...
__________________
"Es imposible hacer un programa 100% contra tontos, ya que éstos son muy ingeniosos"
Responder Con Cita
  #17  
Antiguo 15-06-2005
Essato Essato is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
Essato Va por buen camino
Gracias!, con release si funciono!

De igual forma Gracias a todos por su tiempo y ayuda
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:23:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi