Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error en Formulario Auxiliar (https://www.clubdelphi.com/foros/showthread.php?t=14404)

jzk 20-09-2004 12:16:24

Error en Formulario Auxiliar
 
Hola a todas/os,

Tengo una aplicación desde donde el formulario principal llama a otro a auxiliar de la siguiente manera:

Código:

var f : TForm3histor;
begin
  Try
          f:=TForm3histor.create(self); //creas el formulario
          f.ShowModal; //lo muestras
          f.free; //liberas memoria formulario Importante
  Except
          on EAccessViolation do
          Messagedlg('FPrincipal: Problemas',mtInformation,[mbOk],0);
  End;
End;

Pero cuando intento ejecutar el programa, me genera un mensaje de error tal que así;

Cita:

Project project1.exe raised exception class EAccessViolation with message 'Violación de accesso a la dirección 00000000. Leer de direccion 00000000.'. Process stopped. Use Step o Run to continue.
Lo curioso es que la mayoria de ocasiones (90%) me falla el programa, pero sin embargo en otras me abre el formulario auxiliar.¿Estoy haciendo algo mal?

Neftali [Germán.Estévez] 20-09-2004 13:32:21

¿Dónde tienes éste código? ¿No los tendrás en el evento OnCreate? Si es así muévelo al OnShow.
Prueba a cambiar el Self del create por un Application.

Yo también revisaría qué haces en el OnCreate/OnShow del secundario.
Otra prueba que se me ocurre, prueba a poner éste form como autocreate; Dependiendo de si falla o funciona OK, te dirá si el error puede ser del auxiliar o si es del principal.

Gydba 20-09-2004 14:07:59

Hola, la verdad es que esto me desorienta un poco:
Cita:

Empezado por jzk
Lo curioso es que la mayoria de ocasiones (90%) me falla el programa, pero sin embargo en otras me abre el formulario auxiliar.¿Estoy haciendo algo mal?

Tendrías que darnos más info sobre lo que querés hacer, porque la verdad es que por lo menos a mi se me ocurren mil cosas para decirte pero nada específico.

jzk 20-09-2004 16:41:08

Primero agradecer a neftali y Gydba el interés mostrado.

He creado un nuevo objeto, un botón simple y llano, y en él he vuelto a escribir el código para generar un nuevo objeto, tal y como he explicado anteriormente, y cual es mi sorpresa que ahora si que funciona correctamente sin ningún tipo de problema, se crea el formulario auxiliar y me permite trabajar en él.

¿Que me cuelguen si entiendo algo?, esto es de locos.

marto 20-09-2004 16:52:47

Wop!
Cita:

Empezado por jzk
He creado un nuevo objeto, un botón simple y llano, y en él he vuelto a escribir el código...

¿Y antes dónde lo tenias?

jzk 20-09-2004 17:03:27

Anteriormente lo tenia en el evento OnDblClick de una de las 3 páginas de un objeto TPageControl.

¿Se te ocurre algo?

marto 20-09-2004 17:10:55

Wop!

Cita:

Empezado por jzk
¿Se te ocurre algo?

Sí, se me ocurre que te olvidas de explicarnos algo ;)

El código que nos muestras es correcto salvo por una linea

Cita:

Empezado por jzk
Código Delphi [-]
 on EAccessViolation do

Que debería ser:
Código Delphi [-]
 on E: EAccessViolation do

Pero asumo que es un error de escritura, ya que sinó no compilaría. Además, esa línea la puedes suprimir, ya que no haces uso de la excepción. Además, ten en cuenta que de ese modo solo capturarás ese tipo de excepciones.
Yo creo que tienes que hacer algo más en otra parte que es la que produce el error. Te recomiendo que depures tu programa y veas exactamente en que línea falla. Si, por ejemplo, es al construir el formulario, examina su constructor o su evento OnCreate.

roman 20-09-2004 17:27:58

Cita:

Empezado por marto
El código que nos muestras es correcto salvo por una linea


Que debería ser:
Código Delphi [-]
 on E: EAccessViolation do

Pero asumo que es un error de escritura, ya que sinó no compilaría.

Esteee, sí compilará; el uso de la variable E no es necesario.

// Saludos

marto 20-09-2004 20:58:33

Wop!

Cita:

Empezado por roman
Esteee, sí compilará; el uso de la variable E no es necesario.


Estoooo, nolo sabía :o :rolleyes:
y entoces qué se supone, ¿que entra sólo si la excepción es de esa clase pero no tienes acceso al objeto?


La franja horaria es GMT +2. Ahora son las 04:30:20.

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