Ver Mensaje Individual
  #8  
Antiguo 18-09-2007
nfrfabian nfrfabian is offline
Miembro
 
Registrado: ago 2006
Posts: 55
Reputación: 18
nfrfabian Va por buen camino
hola paldave. Te comento que poner todo el codigo del form me parece mucho porque el solo el form que hace la llamada con showmodal tiene mas de 5000 lineas. Pongo solo parte del codigo del boton que hace la llamada:


Código Delphi [-]
...
      if (preser[ultimopre5].indicli <> 0) then
      begin

        //resfact.showmodal;
        {
        if not (resfact is Tresfact) then
        begin
          resfact := Tresfact.Create(nil);
        try
          resfact.ShowModal;
        finally
          resfact.Free;
        end;
        }
        {
        with Tresfact.Create(nil) do
          try
            ShowModal();
          finally
            Free();
        end;
         }
        resfact := Tresfact.Create(Application);
        try
          resfact.ShowModal;
        finally
          freeandnil(resfact);
        end;
         {
         if not assigned(resfact) then
          resfact := Tresfact.Create(selft);
         resfact.ShowModal;
         resfact.Free;
         }
      end
...







siendo preser un tipo de datos propio que es una vector. Quizas el error viene por ese lado porque al ser preser una variable global, en el el evento onshow del form resfact busco datos en la variable y si el indice del vector no es correcto se produce el access violation (En realidad esto me paso a veces pero generalmente, la aplicacion me muestra el error y despues sigue funcionando, no como ahora que directamente se cierra.
Lo que hice fue en el evento onshow de resfact poner lo siguiente:



Código Delphi [-]
...
if ultimopre5 <= 200 then
begin
  idnombre := preser[ultimopre5].idnombre;
end;
...







De esta forma la aplicacion no se cerro repentinamente en algunas pruebas, pero no estoy seguro que lo que hice fue solucionar el problema, o solo es cuestion de tiempo para que se produzca de nuevo.
Responder Con Cita