Ir al contenido


Foto

d2010 y creacion de formularios en run time


  • Por favor identifícate para responder
4 respuestas en este tema

#1 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 23 marzo 2010 - 02:44

Aqui de nuevo. Siempre he usado este codigo para crear un formulario en run time:



delphi
  1. with TfmBoleto.Create(Application) do
  2.       try
  3.         showmodal;
  4.       finally
  5.         free;
  6.       end;



Ahora resulta que la primera vez que lo ejecuto funciona correctamente, pero la segunda vez que lo intento me aparece un mensaje de error,

---------------------------
Controlv
---------------------------
Access violation at address 006D0075. Read of address 006D0075.
---------------------------
Aceptar 
---------------------------


sigo el debug hasta que el formulario se muestra (un panel, dos botones y un scrollBox) cierro la ventana y lo vuelvo a intentar y se ejecuta correctamente! ¿Alguna idea?
  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 23 marzo 2010 - 02:47

Hola
Y no as probado destroid en vez de free?
Saludos
  • 0

#3 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 23 marzo 2010 - 02:51

Aqui de nuevo. Siempre he usado este codigo para crear un formulario en run time:



delphi
  1. with TfmBoleto.Create(Application) do
  2.       try
  3.         showmodal;
  4.       finally
  5.         free;
  6.       end;



Ahora resulta que la primera vez que lo ejecuto funciona correctamente, pero la segunda vez que lo intento me aparece un mensaje de error,

---------------------------
Controlv
---------------------------
Access violation at address 006D0075. Read of address 006D0075.
---------------------------
Aceptar 
---------------------------


sigo el debug hasta que el formulario se muestra (un panel, dos botones y un scrollBox) cierro la ventana y lo vuelvo a intentar y se ejecuta correctamente! ¿Alguna idea?


Sugerencia:

Método 1.- FreeAndNIL en lugar de Free.
Método 2.- Pantalla := NIL.

No tiene qué ver con la versión de Delphi (o bueno, no mucho) sino con el nuevo manejo de objetos implementados en Delphi 2010. El lenguaje es excelente, pero ahora es más quisquilloso para algunos procesos.
  • 0

#4 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 23 marzo 2010 - 03:06

Hola
Hace tiempo hice este ejemplo, acabo de hacer que cree un form, esto no lo hacia.
Tal vez te sirva
Saludos

Archivos adjuntos


  • 0

#5 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 23 marzo 2010 - 09:08

Bueno probe tu ejemplo Carlos y me funcionaba muy bien, asi que me fui al OnShow del formulario que se estaba creando y ahi encontre el problema. Tengo un proceso ahi de un Reporte con Rave y ese era el que creaba problemas, ya que la primera vez se ejecutaba pero en la segunda vez no, asi que revisando le di solucion a ese proceso y listo.

No tengo Delphi 7, mi instalador se daño y para no "volver atras" no lo he querido "reparar" pero no recuerdo si en D7 FreeAndNil pide un objeto o es simplemente FreeAnNil.



delphi
  1. with TfmBoleto.Create(Application) do
  2.       try
  3.         showmodal;
  4.       finally
  5.         free;
  6.       end;





delphi
  1. with TfmBoleto.Create(Application) do
  2.       try
  3.         showmodal;
  4.       finally
  5.         freeandnil;
  6.       end;





delphi
  1. with TfmBoleto.Create(Application) do
  2.       try
  3.         showmodal;
  4.       finally
  5.         freeandnil("Obj"); //Asi lo pide D2010
  6.       end;



  • 0




IP.Board spam blocked by CleanTalk.