Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2017-05

Error External SIGSEGV al asignar valor de propiedad

8 messages · 5 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Ismael L. Donis Garcia

Tengo un formulario que tiene una propiedad pública:

public
   { public declarations }
   property salvar: boolean write setsalvar;
procedure Tfrecep.setsalvar(AValue: boolean);
begin
  bvalida:=AValue;
end;

El cual llama otro formulario de la siguiente forma:

     with Tfimprec.Create(nil) do
      try
        asignarnum:=strtoint(snorec);
        entidad:=sentidad;
        Showmodal;
      finally
        Free;
      end;

Cuando desde el formalario Tfimprec trato de asignarle un valor a la propiedad salvar me da dicho error el cual no encuentro la posible causa.

procedure Tfimprec.cmdcerrarClick(Sender: TObject);
begin
  frecep.salvar:=true;
  Self.Close;
end;

Al alguien de ustedes le ha pasado esto? En caso afirmativo como lo han solucionado?

Desde ya Gracias
========
| ISMAEL |
========
Devuan User : http://distrowatch.com/table.php?distribution=devuan WebSite: http://sisconge.byethost15.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170523/9fe5af26/attachment.html>

Reply by email

Maxi
to Ismael L. Donis Garcia

El objeto ya no existe le hiciste free.
Despues del showmodal

El 23 de mayo de 2017, 13:23, Ismael L. Donis Garcia via Lazarus-es <

lazarus-es en lists.lazarus-ide.org> wrote 48 lines
Tengo un formulario que tiene una propiedad pública: public { public declarations } property salvar: boolean write setsalvar; procedure Tfrecep.setsalvar(AValue: boolean); begin bvalida:=AValue; end; El cual llama otro formulario de la siguiente forma: with Tfimprec.Create(nil) do try asignarnum:=strtoint(snorec); entidad:=sentidad; Showmodal; finally Free; end; Cuando desde el formalario Tfimprec trato de asignarle un valor a la propiedad salvar me da dicho error el cual no encuentro la posible causa. procedure Tfimprec.cmdcerrarClick(Sender: TObject); begin frecep.salvar:=true; Self.Close; end; Al alguien de ustedes le ha pasado esto? En caso afirmativo como lo han solucionado? Desde ya Gracias ======== | ISMAEL | ======== Devuan User : http://distrowatch.com/table.php?distribution=devuan WebSite: <http://distrowatch.com/table.php?distribution=devuan>http:// <http://sisconge.byethost15.com>sisconge.byethost15.com _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus-es
El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml Linux User #495070 http://domonetic.com/blog ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170524/e2f7e52e/attachment.html>

Reply by email

Ismael L. Donis Garcia
to Maxi

Si existe el problema ocurre cuando desde un formlario llamo a otro con Showmodal y ese otro llama a otro con Showmodal también

Cuando desde el último llamado quiero coger un valor del anterior me da el error.

Osea

  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;

Desde TForm1

Form2.Showmodal;

y desde Form2

Form3.Showmodal;

Ahora si en Form3 pregunto por ejemplo:

if form2.edit1.text = 'xx' then // aqui suena el error

Prueba creando un proyecto con 3 formularios:
Pon en el primero:
--------
unit Unit1;

{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
  { TForm1 }
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
var
  Form1: TForm1;
implementation
uses
  Unit2;
{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TForm2.Create(nil) do
 try
    Showmodal;
  finally
   Free;
 end;
end;
end.
--------

Pon en el segundo:
--------
unit Unit2;

{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
  { TForm2 }
  TForm2 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
var
  Form2: TForm2;
implementation
uses
  Unit3;
{$R *.lfm}

{ TForm2 }

procedure TForm2.Button1Click(Sender: TObject);
begin
  with TForm3.Create(nil) do
 try
    Showmodal;
  finally
   Free;
 end;
end;
end.
--------

Pon en el tercero:
--------
unit Unit3;

{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
  { TForm3 }
  TForm3 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
    bvalida: boolean;
  public
    { public declarations }
  end;
var
  Form3: TForm3;
implementation
uses
  Unit2;
{$R *.lfm}

{ TForm3 }

procedure TForm3.Button1Click(Sender: TObject);
begin
  if Form2.Edit1.Text='xx' then
    bvalida:=true;
end;
end.
--------

Saludos Cordiales
========
| ISMAEL |
========
Devuan User : http://distrowatch.com/table.php?distribution=devuan WebSite: http://sisconge.byethost15.com

Earlier message 52 lines
----- Original Message ----- From: Maxi via Lazarus-es To: Spanish version of Lazarus List Cc: Maxi Sent: Wednesday, May 24, 2017 1:29 PM Subject: Re: [Lazarus-es] Error External SIGSEGV al asignar valor depropiedad El objeto ya no existe le hiciste free. Despues del showmodal El 23 de mayo de 2017, 13:23, Ismael L. Donis Garcia via Lazarus-es <lazarus-es en lists.lazarus-ide.org> escribió: Tengo un formulario que tiene una propiedad pública: public { public declarations } property salvar: boolean write setsalvar; procedure Tfrecep.setsalvar(AValue: boolean); begin bvalida:=AValue; end; El cual llama otro formulario de la siguiente forma: with Tfimprec.Create(nil) do try asignarnum:=strtoint(snorec); entidad:=sentidad; Showmodal; finally Free; end; Cuando desde el formalario Tfimprec trato de asignarle un valor a la propiedad salvar me da dicho error el cual no encuentro la posible causa. procedure Tfimprec.cmdcerrarClick(Sender: TObject); begin frecep.salvar:=true; Self.Close; end; Al alguien de ustedes le ha pasado esto? En caso afirmativo como lo han solucionado? Desde ya Gracias

Reply by email

Iván
to Ismael L. Donis Garcia

Por la forma que creas los forms, no se inicializan las variables form2 y form3. Usa el procedimiento de applicaton para crearlos.

El 24 may. 2017 8:50 p. m., "Ismael L. Donis Garcia via Lazarus-es" <

lazarus-es en lists.lazarus-ide.org> wrote 261 lines
Si existe el problema ocurre cuando desde un formlario llamo a otro con Showmodal y ese otro llama a otro con Showmodal también Cuando desde el último llamado quiero coger un valor del anterior me da el error. Osea Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; Desde TForm1 Form2.Showmodal; y desde Form2 Form3.Showmodal; Ahora si en Form3 pregunto por ejemplo: if form2.edit1.text = 'xx' then // aqui suena el error Prueba creando un proyecto con 3 formularios: Pon en el primero: -------- unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin with TForm2.Create(nil) do try Showmodal; finally Free; end; end; end. -------- Pon en el segundo: -------- unit Unit2; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm2 } TForm2 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form2: TForm2; implementation uses Unit3; {$R *.lfm} { TForm2 } procedure TForm2.Button1Click(Sender: TObject); begin with TForm3.Create(nil) do try Showmodal; finally Free; end; end; end. -------- Pon en el tercero: -------- unit Unit3; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm3 } TForm3 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } bvalida: boolean; public { public declarations } end; var Form3: TForm3; implementation uses Unit2; {$R *.lfm} { TForm3 } procedure TForm3.Button1Click(Sender: TObject); begin if Form2.Edit1.Text='xx' then bvalida:=true; end; end. -------- Saludos Cordiales ======== | ISMAEL | ======== Devuan User : http://distrowatch.com/table.php?distribution=devuan WebSite: <http://distrowatch.com/table.php?distribution=devuan>http:// <http://sisconge.byethost15.com>sisconge.byethost15.com ----- Original Message ----- *From:* Maxi via Lazarus-es <lazarus-es en lists.lazarus-ide.org> *To:* Spanish version of Lazarus List <lazarus-es en lists.lazarus-ide.org> *Cc:* Maxi <maximiliano.duarte en gmail.com> *Sent:* Wednesday, May 24, 2017 1:29 PM *Subject:* Re: [Lazarus-es] Error External SIGSEGV al asignar valor depropiedad El objeto ya no existe le hiciste free. Despues del showmodal El 23 de mayo de 2017, 13:23, Ismael L. Donis Garcia via Lazarus-es < lazarus-es en lists.lazarus-ide.org> escribió: > Tengo un formulario que tiene una propiedad pública: > > public > { public declarations } > property salvar: boolean write setsalvar; > > procedure Tfrecep.setsalvar(AValue: boolean); > begin > bvalida:=AValue; > end; > > El cual llama otro formulario de la siguiente forma: > > with Tfimprec.Create(nil) do > try > asignarnum:=strtoint(snorec); > entidad:=sentidad; > Showmodal; > finally > Free; > end; > Cuando desde el formalario Tfimprec trato de asignarle un valor a la > propiedad salvar me da dicho error el cual no encuentro la posible causa. > > procedure Tfimprec.cmdcerrarClick(Sender: TObject); > begin > frecep.salvar:=true; > Self.Close; > end; > > Al alguien de ustedes le ha pasado esto? En caso afirmativo como lo han > solucionado? > > > Desde ya Gracias > <http://sisconge.byethost15.com> > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus-ide.org > http://lists.lazarus-ide.org/listinfo/lazarus-es > > -- El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://www.rtve.es/noticias/ 20110104/productos-consumo-duran-cada-vez-menos/392498.shtml Linux User #495070 http://domonetic.com/blog ------------------------------ _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus-es _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus-es

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170524/ced1c16f/attachment.html>

Reply by email

Maxi
to Ismael L. Donis Garcia: Si existe el problema ocurre cuando desde un formlario llamo a otro con Showmodal y ese…

Pero para poder llamar al form 2 debes crear primero, pero se quedaria atascado haste que termine el showmodal.
Y al salir ya el objeto no existe. si quieres ese comportamiento deben estar creados antes de intentar acceder a alguna propiedad.

El 24 de mayo de 2017, 15:51, Ismael L. Donis Garcia via Lazarus-es <

lazarus-es en lists.lazarus-ide.org> wrote 261 lines
Si existe el problema ocurre cuando desde un formlario llamo a otro con Showmodal y ese otro llama a otro con Showmodal también Cuando desde el último llamado quiero coger un valor del anterior me da el error. Osea Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; Desde TForm1 Form2.Showmodal; y desde Form2 Form3.Showmodal; Ahora si en Form3 pregunto por ejemplo: if form2.edit1.text = 'xx' then // aqui suena el error Prueba creando un proyecto con 3 formularios: Pon en el primero: -------- unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin with TForm2.Create(nil) do try Showmodal; finally Free; end; end; end. -------- Pon en el segundo: -------- unit Unit2; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm2 } TForm2 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form2: TForm2; implementation uses Unit3; {$R *.lfm} { TForm2 } procedure TForm2.Button1Click(Sender: TObject); begin with TForm3.Create(nil) do try Showmodal; finally Free; end; end; end. -------- Pon en el tercero: -------- unit Unit3; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm3 } TForm3 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } bvalida: boolean; public { public declarations } end; var Form3: TForm3; implementation uses Unit2; {$R *.lfm} { TForm3 } procedure TForm3.Button1Click(Sender: TObject); begin if Form2.Edit1.Text='xx' then bvalida:=true; end; end. -------- Saludos Cordiales ======== | ISMAEL | ======== Devuan User : http://distrowatch.com/table.php?distribution=devuan WebSite: <http://distrowatch.com/table.php?distribution=devuan>http:// <http://sisconge.byethost15.com>sisconge.byethost15.com ----- Original Message ----- *From:* Maxi via Lazarus-es <lazarus-es en lists.lazarus-ide.org> *To:* Spanish version of Lazarus List <lazarus-es en lists.lazarus-ide.org> *Cc:* Maxi <maximiliano.duarte en gmail.com> *Sent:* Wednesday, May 24, 2017 1:29 PM *Subject:* Re: [Lazarus-es] Error External SIGSEGV al asignar valor depropiedad El objeto ya no existe le hiciste free. Despues del showmodal El 23 de mayo de 2017, 13:23, Ismael L. Donis Garcia via Lazarus-es < lazarus-es en lists.lazarus-ide.org> escribió: > Tengo un formulario que tiene una propiedad pública: > > public > { public declarations } > property salvar: boolean write setsalvar; > > procedure Tfrecep.setsalvar(AValue: boolean); > begin > bvalida:=AValue; > end; > > El cual llama otro formulario de la siguiente forma: > > with Tfimprec.Create(nil) do > try > asignarnum:=strtoint(snorec); > entidad:=sentidad; > Showmodal; > finally > Free; > end; > Cuando desde el formalario Tfimprec trato de asignarle un valor a la > propiedad salvar me da dicho error el cual no encuentro la posible causa. > > procedure Tfimprec.cmdcerrarClick(Sender: TObject); > begin > frecep.salvar:=true; > Self.Close; > end; > > Al alguien de ustedes le ha pasado esto? En caso afirmativo como lo han > solucionado? > > > Desde ya Gracias > <http://sisconge.byethost15.com> > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus-ide.org > http://lists.lazarus-ide.org/listinfo/lazarus-es > > -- El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://www.rtve.es/noticias/ 20110104/productos-consumo-duran-cada-vez-menos/392498.shtml Linux User #495070 http://domonetic.com/blog ------------------------------ _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus-es _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus-es
El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml Linux User #495070 http://domonetic.com/blog ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170524/9f958834/attachment-0001.html>

Reply by email

Iván Mesa
to Maxi

Tienes que crear los formularios con la fórmula Application.CreateForm (TForm2, form2).
Tal como los creas (With TForm2.Create(...)) no podrás acceder a sus datos desde fuera de with, ya que la variable Form2 no se inicializa en ningún sitio.
Para trabajar con datos entre formularios, yo te recomiendo en uso de propiedades públicas:
En el form3:
public

     Property datodeotroform :String.....

Cuando creas el form, antes del show:
desde el form2:
with Tfrom3.create(self)) ...

     datodeotroform := self.datoform2.Text;
     showmodal;
     self.datoform2.text := datodeotroform; //esto sería un ejemplo para

recuperar un dato modificado en form3

     free;

...

etc.

Esta es la mejor forma, aunque pueda parecer que necesitas más código, pero te permitirá usar el dato incluso si el form2 se destruyera antes que el form3 (en tu caso como es showmodal no ocurrirá pero en otras ocasiones producirá quebraderos de cabeza).

Es sólo una recomendación, yo desde que lo hago así, tengo cero problemas con objetos que no existen y trato de acceder a ellos.

Abrazos,
Iván Mesa.

Maxi wrote 241 lines
Pero para poder llamar al form 2 debes crear primero, pero se quedaria atascado haste que termine el showmodal. Y al salir ya el objeto no existe. si quieres ese comportamiento deben estar creados antes de intentar acceder a alguna propiedad. El 24 de mayo de 2017, 15:51, Ismael L. Donis Garcia via Lazarus-es <lazarus-es en lists.lazarus-ide.org <mailto:lazarus-es en lists.lazarus-ide.org>> escribió: Si existe el problema ocurre cuando desde un formlario llamo a otro con Showmodal y ese otro llama a otro con Showmodal también Cuando desde el último llamado quiero coger un valor del anterior me da el error. Osea Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; Desde TForm1 Form2.Showmodal; y desde Form2 Form3.Showmodal; Ahora si en Form3 pregunto por ejemplo: if form2.edit1.text = 'xx' then // aqui suena el error Prueba creando un proyecto con 3 formularios: Pon en el primero: -------- unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin with TForm2.Create(nil) do try Showmodal; finally Free; end; end; end. -------- Pon en el segundo: -------- unit Unit2; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm2 } TForm2 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form2: TForm2; implementation uses Unit3; {$R *.lfm} { TForm2 } procedure TForm2.Button1Click(Sender: TObject); begin with TForm3.Create(nil) do try Showmodal; finally Free; end; end; end. -------- Pon en el tercero: -------- unit Unit3; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm3 } TForm3 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } bvalida: boolean; public { public declarations } end; var Form3: TForm3; implementation uses Unit2; {$R *.lfm} { TForm3 } procedure TForm3.Button1Click(Sender: TObject); begin if Form2.Edit1.Text='xx' then bvalida:=true; end; end. -------- Saludos Cordiales ======== | ISMAEL | ======== Devuan User : http://distrowatch.com/table.php?distribution=devuan <http://distrowatch.com/table.php?distribution=devuan> WebSite: http:// <http://sisconge.byethost15.com>sisconge.byethost15.com <http://sisconge.byethost15.com> ----- Original Message ----- *From:* Maxi via Lazarus-es <mailto:lazarus-es en lists.lazarus-ide.org> *To:* Spanish version of Lazarus List <mailto:lazarus-es en lists.lazarus-ide.org> *Cc:* Maxi <mailto:maximiliano.duarte en gmail.com> *Sent:* Wednesday, May 24, 2017 1:29 PM *Subject:* Re: [Lazarus-es] Error External SIGSEGV al asignar valor depropiedad El objeto ya no existe le hiciste free. Despues del showmodal El 23 de mayo de 2017, 13:23, Ismael L. Donis Garcia via Lazarus-es <lazarus-es en lists.lazarus-ide.org <mailto:lazarus-es en lists.lazarus-ide.org>> escribió: Tengo un formulario que tiene una propiedad pública: public { public declarations } property salvar: boolean write setsalvar; procedure Tfrecep.setsalvar(AValue: boolean); begin bvalida:=AValue; end; El cual llama otro formulario de la siguiente forma: with Tfimprec.Create(nil) do try asignarnum:=strtoint(snorec); entidad:=sentidad; Showmodal; finally Free; end; Cuando desde el formalario Tfimprec trato de asignarle un valor a la propiedad salvar me da dicho error el cual no encuentro la posible causa. procedure Tfimprec.cmdcerrarClick(Sender: TObject); begin frecep.salvar:=true; Self.Close; end; Al alguien de ustedes le ha pasado esto? En caso afirmativo como lo han solucionado? Desde ya Gracias _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org <mailto:Lazarus-es en lists.lazarus-ide.org> http://lists.lazarus-ide.org/listinfo/lazarus-es <http://lists.lazarus-ide.org/listinfo/lazarus-es> -- El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml <http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml> Linux User #495070 http://domonetic.com/blog ------------------------------------------------------------------------ _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org <mailto:Lazarus-es en lists.lazarus-ide.org> http://lists.lazarus-ide.org/listinfo/lazarus-es <http://lists.lazarus-ide.org/listinfo/lazarus-es> _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org <mailto:Lazarus-es en lists.lazarus-ide.org> http://lists.lazarus-ide.org/listinfo/lazarus-es <http://lists.lazarus-ide.org/listinfo/lazarus-es> -- El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml Linux User #495070 http://domonetic.com/blog _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus-es

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170524/33889340/attachment-0001.html>

Reply by email

Ismael L. Donis Garcia
to Maxi: Pero para poder llamar al form 2 debes crear primero, pero se quedaria atascado haste que…

Si quiero que se quede como tu dices atascado hasta que termine el Showmodal

Y tu dices que no lo creo?

No se crea cuando digo:
TForm2.Create(nil)

Si no se crea como es que se muestra?

De algo si tienes razón Ivan y es algo que no entiendo. Si alguien me lo pudiera explicar más. Ya que yo nunca he trabajado con delphi y soy bastante nuevo en Lazarus

De la siguiente forma no da error:

  Application.CreateForm(TForm2, Form2);
  with Form2 do
  try
    Showmodal;
  finally
   Free;
  end;

Y sin envargo de la siguiente forma si da error:

with TForm2.Create(nil) do
 try
    Showmodal;
  finally
   Free;
 end;

Saludos Reiterados
========
| ISMAEL |
========
Devuan User : http://distrowatch.com/table.php?distribution=devuan WebSite: http://sisconge.byethost15.com

Earlier message 243 lines
----- Original Message ----- From: Maxi via Lazarus-es To: Spanish version of Lazarus List Cc: Maxi Sent: Wednesday, May 24, 2017 3:20 PM Subject: Re: [Lazarus-es] Error External SIGSEGV al asignar valor depropiedad Pero para poder llamar al form 2 debes crear primero, pero se quedaria atascado haste que termine el showmodal. Y al salir ya el objeto no existe. si quieres ese comportamiento deben estar creados antes de intentar acceder a alguna propiedad. El 24 de mayo de 2017, 15:51, Ismael L. Donis Garcia via Lazarus-es <lazarus-es en lists.lazarus-ide.org> escribió: Si existe el problema ocurre cuando desde un formlario llamo a otro con Showmodal y ese otro llama a otro con Showmodal también Cuando desde el último llamado quiero coger un valor del anterior me da el error. Osea Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; Desde TForm1 Form2.Showmodal; y desde Form2 Form3.Showmodal; Ahora si en Form3 pregunto por ejemplo: if form2.edit1.text = 'xx' then // aqui suena el error Prueba creando un proyecto con 3 formularios: Pon en el primero: -------- unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin with TForm2.Create(nil) do try Showmodal; finally Free; end; end; end. -------- Pon en el segundo: -------- unit Unit2; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm2 } TForm2 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form2: TForm2; implementation uses Unit3; {$R *.lfm} { TForm2 } procedure TForm2.Button1Click(Sender: TObject); begin with TForm3.Create(nil) do try Showmodal; finally Free; end; end; end. -------- Pon en el tercero: -------- unit Unit3; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm3 } TForm3 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } bvalida: boolean; public { public declarations } end; var Form3: TForm3; implementation uses Unit2; {$R *.lfm} { TForm3 } procedure TForm3.Button1Click(Sender: TObject); begin if Form2.Edit1.Text='xx' then bvalida:=true; end; end. -------- Saludos Cordiales ======== | ISMAEL | ======== Devuan User : http://distrowatch.com/table.php?distribution=devuan WebSite: http://sisconge.byethost15.com ----- Original Message ----- From: Maxi via Lazarus-es To: Spanish version of Lazarus List Cc: Maxi Sent: Wednesday, May 24, 2017 1:29 PM Subject: Re: [Lazarus-es] Error External SIGSEGV al asignar valor depropiedad El objeto ya no existe le hiciste free. Despues del showmodal El 23 de mayo de 2017, 13:23, Ismael L. Donis Garcia via Lazarus-es <lazarus-es en lists.lazarus-ide.org> escribió: Tengo un formulario que tiene una propiedad pública: public { public declarations } property salvar: boolean write setsalvar; procedure Tfrecep.setsalvar(AValue: boolean); begin bvalida:=AValue; end; El cual llama otro formulario de la siguiente forma: with Tfimprec.Create(nil) do try asignarnum:=strtoint(snorec); entidad:=sentidad; Showmodal; finally Free; end; Cuando desde el formalario Tfimprec trato de asignarle un valor a la propiedad salvar me da dicho error el cual no encuentro la posible causa. procedure Tfimprec.cmdcerrarClick(Sender: TObject); begin frecep.salvar:=true; Self.Close; end; Al alguien de ustedes le ha pasado esto? En caso afirmativo como lo han solucionado? Desde ya Gracias

Reply by email

Jose Antonio Cuello
to Ismael L. Donis Garcia: Tengo un formulario que tiene una propiedad pública: public { public declarations }…

Hola, la forma de crear el objeto es correcta. Creo que el problema está en que usas dentro de la clase Tfimprec la variable frecep que se supone que es del tipo Tfrecep pero no le asignas el valor que lo enlaza con el formulario padre. Deberías tener una variable o property dentro del formulario hijo que recoja el puntero al padre. Te pongo un ejemplo reducido, si no lo ves claro dime cosas. Un saludo

En Tfimprec :
type Tfimpec
private
FParent: Tfrecep;
public
property parent: Tfrecep read FParent write FParent;
end;
procedure Tfimprec.cmdcerrarClick(Sender: TObject);
begin
Self.Parent.salvar := true;
Self.Close;
end;

En la llamada desde Tfrecep:

with Tfimprec.Create(nil) do
try
asignarnum:=strtoint(snorec);
entidad:=sentidad;
parent := Self;
Showmodal;
finally
Free;
end;

De: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus-ide.org> Para: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org>, "Spanish version of Lazarus List" <lazarus-es en lists.lazarus-ide.org> CC: "Ismael L. Donis Garcia" <slibre en natio.co.cu> Enviados: Martes, 23 de Mayo 2017 18:23:39
Asunto: [Lazarus-es] Error External SIGSEGV al asignar valor de propiedad

Tengo un formulario que tiene una propiedad pública:
public
{ public declarations }
property salvar: boolean write setsalvar;
procedure Tfrecep.setsalvar(AValue: boolean);
begin
bvalida:=AValue;
end;
El cual llama otro formulario de la siguiente forma:
with Tfimprec.Create(nil) do
try
asignarnum:=strtoint(snorec);
entidad:=sentidad;
Showmodal;
finally
Free;
end;
Cuando desde el formalario Tfimprec trato de asignarle un valor a la propiedad salvar me da dicho error el cual no encuentro la posible causa.
procedure Tfimprec.cmdcerrarClick(Sender: TObject);
begin
frecep.salvar:=true;
Self.Close;
end;
Al alguien de ustedes le ha pasado esto? En caso afirmativo como lo han solucionado?
Desde ya Gracias
========
| ISMAEL |
========
Devuan User : [ http://distrowatch.com/table.php?distribution=devuan | http://distrowatch.com/table.php?distribution=devuan ]
WebSite: [ http://distrowatch.com/table.php?distribution=devuan ] [ http://sisconge.byethost15.com/ | http:// ] sisconge.byethost15.com

Reply by email