Recent

Author Topic: Error SIGSEGV al cargar form [SOLUCIONADO]  (Read 3694 times)

pbruccoleri

  • New Member
  • *
  • Posts: 28
Error SIGSEGV al cargar form [SOLUCIONADO]
« on: June 27, 2018, 12:54:02 am »
Hola
HAce años no uso lazarus. Hoy descargué la versión 1.8.4 para hacer un simple proyecto:un form ppal, un menú con un opción, un datamodule con un ADSConnection (porque uso ADS como base de datos, ya instalé los componentes correspondientes)

En el frmMain, en esta parte:
procedure TfrmMain.MenuItem3Click(Sender: TObject);
var
  f: TfrmEfectivoProv;
begin
  try
    f.ShowModal;
  finally
    FreeandNil(f);
  end;
end;         

al ejecutarse el ShowModal sale el error SIGSEGV.

Ya he revisado de todo y no me doy cuenta del problema.
Alguna ayuda? Muchas gracias

« Last Edit: June 27, 2018, 03:05:31 pm by pbruccoleri »

GAN

  • Sr. Member
  • ****
  • Posts: 370
Re: Error SIGSEGV al cargar form
« Reply #1 on: June 27, 2018, 01:14:38 am »
Hola, en qué momento creas el Form TfrmEfectivoProv?

Code: Pascal  [Select][+][-]
  1. procedure TfrmMain.MenuItem3Click(Sender: TObject);
  2. var
  3.   f: TfrmEfectivoProv;
  4. begin
  5.   try
  6.     f.Create(nil);  //<---- Agrega esto
  7.     f.ShowModal;
  8.   finally
  9.     FreeandNil(f);
  10.   end;
  11. end;    
Lazarus 2.0.8 FPC 3.0.4 Linux Mint Mate 19.3
Zeos 7̶.̶2̶.̶6̶ 7.1.3a-stable - Sqlite 3.32.3 - LazReport

pbruccoleri

  • New Member
  • *
  • Posts: 28
Re: Error SIGSEGV al cargar form
« Reply #2 on: June 27, 2018, 02:08:05 am »
Hola..
está entre los creados automáticamente. Como son apenas 3, por ahora se están creando desde el inicio.

En el .lpr está esto:
  RequireDerivedFormResource:=True;
  Application.Initialize;
  Application.CreateForm(TDataModule1, DataModule1);
  Application.CreateForm(TfrmMain, frmMain);
  Application.CreateForm(TfrmEfectivoProv, frmEfectivoProv);
  Application.Run;   

voy a probar sacarlo de allí y hacer lo que tu dices......

lo saqué de los creados automáticamente y puse el create antes del Showmodal y pasó lo mismo.

Adjunto el proyecto de ejemplo... no tiene nada,solo las llamadas... es apenas el principio de algo
Muchas gracias



GAN

  • Sr. Member
  • ****
  • Posts: 370
Re: Error SIGSEGV al cargar form
« Reply #3 on: June 27, 2018, 02:32:19 am »
Imposible probar tu proyecto porque me faltan componentes, no obstante,  en uses de main debes agregar la unidad del Form que vas a crear/utilizar, que es efectivoProv:

Code: Pascal  [Select][+][-]
  1. unit main;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics,
  9.   Dialogs, Menus, Windows, efectivoProv;      

Luego:

Code: Pascal  [Select][+][-]
  1. procedure TfrmMain.MenuItem3Click(Sender: TObject);
  2.   frmEfectivoProv:TfrmEfectivoProv.Create(nil);
  3.   frmEfectivoProv.ShowModal;
  4.   FreeAndNil(frmEfectivoProv);
  5. end;

Nota que usas la variable definida en el formulario efectivoProv que es:

Code: Pascal  [Select][+][-]
  1. var
  2.   frmEfectivoProv: TfrmEfectivoProv;  

Es decir, en la unit efectivoProv declaras la variable frmEfectivoProv y en main, con create, creas una instancia, objeto de esa clase.

Saludos.
Lazarus 2.0.8 FPC 3.0.4 Linux Mint Mate 19.3
Zeos 7̶.̶2̶.̶6̶ 7.1.3a-stable - Sqlite 3.32.3 - LazReport

pbruccoleri

  • New Member
  • *
  • Posts: 28
Re: Error SIGSEGV al cargar form
« Reply #4 on: June 27, 2018, 03:05:06 pm »
Hola
Siempre pongo en el uses del implementation las unidades que necesito y no suelo usar el nombre de la variable ya definida en el formulario
var
  frmEfectivoProv: TfrmEfectivoProv;

No sé si tiene alguna ventaja usarla o no, no recuerdo.

Hoy probé hacer esto y funcionó:

procedure TfrmMain.MenuItem3Click(Sender: TObject);
var
  f: TfrmEfectivoProv;
begin
  f:= TfrmEfectivoProv.Create(Self);
  try
    f.Showmodal;
  finally
    FreeandNil(f);
  end;
end;     

Muchas gracias por tus prontas respuestas!

 

TinyPortal © 2005-2018