Forum > Spanish
Excepción de la clase 'External: SIGSEGV' al intentar listar reporte
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