[Lazarus-es] Error en formularios y lazreport

Ismael L. Donis Garcia slibre en citricos.co.cu
Lun Jul 20 21:49:05 CEST 2015


Respondo entre lineas.

Ante todo recuerda que nunca he trabajado con Delphi por lo que provengo de 
la filosofía de Microsoft la cual de hecho me gusta mucho "me refiero la 
filosofía de programación".

>----- Original Message ----- 
>From: "Maxi" <maximiliano.duarte en gmail.com>
>To: "Spanish version of Lazarus List" 
><lazarus-es en lists.lazarus.freepascal.org>
>Sent: Monday, July 20, 2015 12:54 PM
>Subject: [Lazarus-es] Error en formularios y lazreport
>

>El día 18 de julio de 2015, 11:57, Ismael L. Donis Garcia
><slibre en citricos.co.cu> escribió:
>> En el encabezamiento del grupo das click secundario y marcas las opción 
>> de
>> Forzar Nueva Página.
>>
>> Respecto a Delphi ni me preguntes. Jamas en la vida lo he usado, nunca me 
>> ha
>> gustado. En windows siempre había trabajado con Visual Estudio.
>>
>> He mirado a Lazarus porque es libre y multiplataforma y como yo me he 
>> tirado
>> ultimamente para Linux, soy el encargado en mi empresa en difundir el 
>> soft
>> libre. De hecho el sistema operativo que uso por defecto es Jessie, 
>> aunque
>> tengo PC virtuales con 1 millón de sistemas porque viy haciendo estudios 
>> de
>> los que puedo hacerme, ahora mismo estoy mirando a Manjaro OpenRC el cual 
>> ha
>> tenido una bueba aceptación.
>>
>> En estos momentos estoy parado en Lazarus, hoy voy a instalar la versión
>> 1.4.2 a ver si me resuelve un problema que tengo precisamente con 
>> lazreport
>> el cual me da una ecepción si cierro todos los formulario abiertos desde 
>> un
>> modulo de datos y los vuelvo a abrir. Al volver abrir los formulario y
>> tratar de visualizar algo en lazreport este tira una ecepción y me cierra 
>> el
>> programa la rutina que tengo para cerrar los formularios es la siguiente:
>>
>> procedure Tdm.IniSis();
>> var
>> f: Tforigen;
>>  i: integer;
>> begin
>>  DecimalSeparator:='.';
>>  ThousandSeparator:=',';
>>  ShortDateFormat := 'dd/mm/yyyy';
>>  blnend := false;
>>  intciclo := 0;
>>  intfilas := 0;
>>  intnivel := 0;
>>  lngentidad := 0;
>>  struser := '';
>>  strerror := '';
>>  for i := Screen.FormCount - 1 downto 0 do begin
>>    if Screen.Forms[i].Name <> Self.Name then begin
>>      if Screen.Forms[i].Name <> 'fconta' then Screen.Forms[i].Free;
>>    end;
>>  end;
>>  for i := Screen.FormCount - 1 downto 0 do begin
>>    if Screen.Forms[i].Name <> Self.Name then Screen.Forms[i].Free;
>>  end;
>>  Application.CreateForm(Tfconta, fconta);
>>  Application.CreateForm(Tfsplash, fsplash);
>> fsplash.Show;
>>  Application.ProcessMessages;
>>  if datos() then
>>    entrar()
>>  else
>>    begin
>>      f:=Tforigen.Create(Self);
>>      f.IniSystem:=true;
>>     f.ShowModal;
>>     f.Free;
>>      if blnend then
>>        cerrarme()
>>      else if datos() then
>>        begin
>>          intciclo := intciclo + 1;
>>         entrar()
>>        end
>>      else
>>        cerrarme();
>>    end;
>> end;
>>
>> El error que me da es el siguiente:
>> El proyecto XXXX  ha lanzado una excepción de la clase Éxternal: SIGSEGV' 
>> En
>> Archivo '.\include\control.inc'en linea 3260
>>
>> Pero no veo cual puede ser el error porque si no cierro los formularios 
>> con
>> la rutina anterior nunca me da ese error, lo peor del caso es que a veces 
>> si
>> tengo que utilizar ese procedimiento.
>>
>> Por ese motivo voy a instalar la versión 1.4.2 a ver si persiste el
>> problema.
>>
>> Saludos Cordiales
>> ========
>> | ISMAEL |
>> ========
>
>Paso a otro hilo para que sirva despues.
>
>Creo que primero debes dejar al modulo de datos solo para datos, y
>hacer las creaciones y destrucciones mas controladas.
>
>>  Application.CreateForm(Tfsplash, fsplash);
>> fsplash.Show;
>
>el splash lo creas en el proyecto

Ya esta creado en el proyecto el formulario. En esas lineas lo que hace 
segun la filosofía de microsoft es
1.- crear una instancia del formulario
2.- mostrar la intancia

Yo en las propiedades del proyecto tengo a modulo de datos solamente para 
que se cree el formulario automaticamente los demás no.

>
>>  Application.CreateForm(Tfconta, fconta);
>
>No usaria esto sino Tfconta.Create(self), aunque en tu caso usaria el
>envento occlose y le pondria caFree, que lo destruye al salir del
>form, con eso te olvidas de liberarlo y no usaria Self sino nil (sin
>pariente)

Si pongo:
Tfconta.Create(self);
o
Tfconta.Create(nil);

Despues no puedo mostrar el formulario con:
fconta.Show;

Ni tampoco puedo usar el siguiente procedimiento por ejemplo ''que lo uso 
tal como está" lo cual tengo en otro formulario.

procedure Tflogin.mnuother(buser: boolean);
begin
  with fconta do begin
    mnuherod.Visible := buser;
    mnuherbh.Visible := buser;
    mnuhercs.Visible := buser;
    mnuherbar2.Visible := buser;
    mnuherec.Visible := buser;
    mnuhercp.Visible := buser;
    mnuherbar3.Visible := buser;
    mnuherid.Visible := buser;
    mnuhereh.Visible := buser;
    mnuherbar4.Visible := buser;
  end;
end;

Ya que no encuentra a fconta

>
>procedure TFormPrincipal.FormClose(Sender: TObject;  var 
>CloseAction:TCloseAction);
>begin
>  CloseAction:=caFree;
>end;
>

Puse la declaración CloseAction:=caFree; en todo los FormClose y persiste el 
problema

>
>Te ayudo si quieres
>

No estaría de más, por el contrario sería bien venida toda ayuda.

Así como lo tengo todo funciona bien. Excepto los reportes que si se 
visualizan bien la primera vez que se use el procedimiento procedure 
Tdm.IniSis(); pero si lo ejecuto por segunda vez entonces es cuando me dan 
error los reportes.

Ese procedimieto se ejecuta siempre al iniciar la apliación y ahi todo 
funciona bien, pero si mando a ejecutar ese procedimiento por segunda vez 
los reportes dan error, pero el trabajo con los formularios no da error 
alguno.

Saludos Reiterados
========
| ISMAEL |
========
Only for the small landowners and Cubans companies
Website: www.sisconge.byethost15.com
              www.sisconge.hol.es 






More information about the Lazarus-es mailing list