Forum > Spanish

Excepción de la clase 'External: SIGSEGV' al intentar listar reporte

<< < (3/3)

esdonis:
Deje lo suiguiente

  x := false;
  for i := Screen.FormCount - 1 downto 0 do begin
    if Screen.Forms.Name = 'fconta' then x := true;
  end;
  if not x then Application.CreateForm(Tfconta, fconta);

Y no da el error

Pero ahora como cierro los formularios que tengo abierto si quiere iniciar otro usuario la sección de trabajo?

Edson:
El problema no está en cerrar los formularios, sino en cómo los cierras. No conozco tu aplicativo pero te repito:


--- Quote from: Edson on January 22, 2017, 04:03:01 pm --- ... debe haber rutimas especializadas para destruir formularios, teniendo cuidado de que los objetos que contienen no sean referenciados luego. Ello puede implicar reiniciar eventos, deshabilitar Timers o destruir previamente algunos objetos problemáticos.

--- End quote ---

Si tienes un formulario principal, ese es el que debe cerrar a los demás formularios. Mejor sería que ubiques a los formularios por su clase en lugar de su nombre y, mejor aún, si creas una lista para almacenar a los formularios que estás abriendo.
 

esdonis:
Si es ese el problema ya que puse:
x := false;
  for i := Screen.FormCount - 1 downto 0 do begin
    if (Screen.Forms.Name <> 'dm') and (Screen.Forms.Name <> 'fconta') then
      begin
        Application.MessageBox(pchar(Screen.Forms.Name), pchar('Error de Prueba'), 0);
        Screen.Forms.Free;
      end
    else if Screen.Forms.Name = 'fconta' then
        x := true;
  end;

Y me entra a formularios de Lazarus que no son los del proyecto, por eso el error después.

Me voy a poner a estudiar como crear la lista ya que soy nuevo en Lazarus y en delphi nunca ni lo he mirado. Ni pienso tampoco mirarlo ya que no es soft libre

lainz:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---Screen.Forms.Free;
Ahí no especificas que formulario liberar, o me equivoco? Tendría que ser así:


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---  for i := Screen.FormCount - 1 downto 0 do begin    if (Screen.Forms[i].Name <> 'dm') and (Screen.Forms[i].Name <> 'fconta') then      begin        Application.MessageBox(pchar(Screen.Forms[i].Name), pchar('Error de Prueba'), 0);        Screen.Forms[i].Free;      end    else if Screen.Forms[i].Name = 'fconta' then        x := true;

esdonis:
Si ese error ya me había dado cuenta.

Pero el problema que el for i := Screen.FormCount - 1 downto 0 do me cierra formularios de lazarus que no forman parte del proyecto mio sino de el sistema de Lazarus

Poniendo un mensaje vi que me cierra el formulario frProgressForm que es de Lazarus y no forma parte del proyecto

Por lo que me parece que lo más correcto sería crear una lista de los formularios abiertos como me dijo Epson y recorrer la lista para cerrar los formularios.

Ahora tengo que buecar como hacer eso o implementar alguna otra forma de hacerlo


Navigation

[0] Message Index

[*] Previous page

Go to full version