Ver Mensaje Individual
  #7  
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