Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ERROR con formulario showmodal (https://www.clubdelphi.com/foros/showthread.php?t=26895)

molina669 07-11-2005 11:04:01

ERROR con formulario showmodal
 
Hola a todos y les agradecería que me ayudaran con un problemilla que fijo es una tontería pero que me trae locooooo.
Mi problema es que abro un formulario,donde introduzco una nueva provincia, con showmodal desde otro formulario. El formulario "showmodal" se abre bien, pero el problema viene cuando el padre tiene que evaluar si ha devuelto mrok o mrcancel. me sale el típico mensaje de "acces violation", ya he comprobado que los botones devuelven mrok y mrcancel.

Dentro de mi locura transitoria he intentado incluso abrir el formulario con show y no con showmodal(evidentemente tb sin mrok ni mrcancel) y me lo hace de PM, pero solo una vez, la segunda me da el mismo "access violation".

Les pido ayudo porque ya no se donde meterme.

Gracias a tod@s

epuigdef 07-11-2005 12:47:11

Debes tener en cuenta dónde creas la instancia del formulario que muestras.
Tu problema parece que se debe a que destruyes el formulario y después intentas acceder a sus datos, y por esto te da error.

Espero que te sirva

Edu

molina669 07-11-2005 13:10:50

Gracias por contestar, lo he comprobado y el error me da en la linea:" if (frmprovincia.showmodal =true) then", luego no intento acceder a sus elementos, sino a ella misma. Tal vez sea algún problema en la configuracion de delphi. Uso delphi5 con ADO, por si os sirve de algo pa ayudarme.

epuigdef 07-11-2005 13:16:24

Ya me imaginaba que te daba el error en esta línea, pero el tema está en dónde creas la instancia de frmprovincia. En algún lugar no lejos de ahí y un poco más arriba debería estar la creación, del tipo

Código Delphi [-]
   frmProvincia := TFrmProvincia.create(nil);

Y más abajo la destrucción:

Código Delphi [-]
   frmProvincia.free;


En general, cuando se usa un formulario modal la estructura es la siguiente:


Código Delphi [-]
  function recuperarDato : String;
  var frmProvincia : TFrmProvincia;
       temporal  String;
  begin
      frmProvincia := TFrmProvincia.create(Nil);
      try
         if frmProvincia.showmodal = mrOk then
            temporal := frmProvincia.EditProvincia.text
         else
            temporal := '';
 
     finally
       frmProvincia.free;
     end;
   
     recuperardato := temporal;
  end;

Un saludo

Edu

Lepe 07-11-2005 16:23:14

En lugar de frmprovincias.Free,
pon FreeAndNil(frmprovincias).

La diferencia es que con .Free, el puntero frmprovincias no queda apuntando a nil, sino a la dirección de memoria donde se encontraba la ventana, como ya se ha liberado, estas accediendo a una dirección no válida.

Ten cuidado de que la forma no tenga cafree en su evento OnClose, ya que al cerrarse se destruirá, y puedes perder la referencia.

saludos

molina669 08-11-2005 10:49:57

Gracias a los dos me ha servido mucho vuestra ayuda


La franja horaria es GMT +2. Ahora son las 04:28:58.

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