[Lazarus-es] Duda sobre declaración y el alance de variables en los formularios

Maxi maximiliano.duarte en gmail.com
Mie Sep 4 02:24:48 CEST 2013


El 03/09/2013 20:03, "Ismael L. Donis Garcia" <ismael en citricos.co.cu>
escribió:
>
> No entiendo cuando me dices fuera del formulario.
>
> Yo lo hago dentro del formulario en la parte superior debajo de donde
dice implementación.
>
> y lo llamo desde otr formulario como dije antes. Osea diciendo desde otro
formulario:
>
>
> var
>   f: Tform1;
> begin
>   f:=Tform1.Create(Self);
>   f.ShowModal;
>   f.Free;
> end;
>
>
> Probe poniendo como me dice Maxi Private y me da el siguiente error:
>
> uflbal.pas(114,2) Fatal: Syntax error, ":" expected but "identifier
BVALIDA" found
>
> Tengo declarado lo siguiente:
>
>
> implementation
>
> uses
>   udm, ufconta, ufvisual;
>
> type
>  TBranch = record
>    Sum: string;
>     Debe: string;
>     Haber: string;
>     sascta: array of string;
>     sacap: array of string;
>     sascap: array of string;
>     saele: array of string;
>     saemp: array of string;
>     pdscta: array of string;
>     phscta: array of string;
>     pdcap: array of string;
>     phcap: array of string;
>     pdscap: array of string;
>     phscap: array of string;
>     pdele: array of string;
>     phele: array of string;
>     pdemp: array of string;
>     phemp: array of string;
>  end;
>
> var
>  private
>    bvalida, blist: boolean;
>    sentidad, snota, strscta, strcap, strscap, strele, stremp: string;
>    iano, CtaIndex, SCtaIndex, CapIndex, SCapIndex, EleIndex, EmpIndex:
integer;
>    lcampos: longint;
>    ddebe, dhaber, ddif, dmdebe, dmhaber, dmdif: double;
>    dini: TDate;
>    Hdrs: array of TBranch;
> end;
>
> El private lo puse porque tratando de hacer lo que me dijo Maxi y no
funcionó. Si quito el private si funciona, pero las variables de me van del
hambito que deseo.
>
> Deseo que solo se vean dentro del formulario.
>
> O es que hay que declararlas dentro del private de los procedimientos?
>
> osea aquí?
>
>   private
>     { private declarations }
>
> Yo ahí declaro las funciones y los precedimientos privados. Por ejemplo
tengo en este formulario:
>
>   private
>     { private declarations }
>     procedure abortar();
>     procedure actdat(icta: integer; sscta: string; scap: string; sscap:
string; sele: string; semp: string; bhisto: boolean);
>     procedure datosact();
>     function valdbal(bhisto: boolean): boolean;
> Disculpen mi desconocmiento de pascal, pero nunca antes lo había mirado.
>
> Saludos Reiterados
> ========
> | ISMAEL |
> ========
> Only for the small landowners and Cubans companies
> Website: www.sisconge.byethost15.com
>               www.sisconge.hol.es
>>
>> ----- Original Message -----
>> From: Martin Gomez
>> To: Spanish version of Lazarus List
>> Sent: Tuesday, September 03, 2013 4:40 PM
>> Subject: Re: [Lazarus-es]Duda sobre declaración y el alance de variables
en los formularios
>>
>> Claro, si las declaras fuera de la clase del formulario las variables
quedan como "globales" (solo para los que tengan la unit del formulario en
su uses).
>> Si necesitas acceder a estos valores desde fuera, el consejo es que
agregues propiedades en el formulario, o las pongas en la sección public,
sino sigue el consejo de Maxi y mantenlas privadas.
>> Otra alternativa sería pasarlas a 0 en el OnCreate.
>>
>>
>> 2013/9/3 Maxi <maximiliano.duarte en gmail.com>
>>>
>>> El día 3 de septiembre de 2013 16:47, Ismael L. Donis Garcia
>>> <ismael en citricos.co.cu> escribió:
>>> > Tengo una gran duda sobre la declaración de variables en formulario.
>>> >
>>> > Si declaro una variable de la siguiente forma:
>>> >
>>> > implementation
>>> >
>>> > var
>>> >  ddebe, dhaber: double;
>>> >
>>> > y llamo el formulario de la siguiente forma:
>>> >
>>> >  f:=form1.Create(Self);
>>> >  f.ShowModal;
>>> >  f.Free;
>>> >
>>> > Y dentro del formulario le doy valores a las variables ddebe y dhaber
y
>>> > cierro el formulario con self.close;
>>> >
>>> > Cuando entro de nuevo al formulario se me conservan los valores de las
>>> > variables ddebe y dhaber.
>>> >
>>> > Ahora mi duda:
>>> >
>>> > Si yo cierro el formulario porque se me mantiene el valor de las
variables
>>> > que yo había calculado en la entrada anterior?
>>> > Este valor no debería ser =0 al volver a entrar de nuevo al
formulario?
>>> > Cual es la causa de este comportamiento?
>>> >
>>> > Desde ya Gracias
>>> > ========
>>> > | ISMAEL |
>>> > ========
>>> > Only for the small landowners and Cubans companies
>>> > Website: www.sisconge.byethost15.com
>>> >              www.sisconge.hol.es
>>> >
>>> >
>>> > _______________________________________________
>>> > Lazarus-es mailing list
>>> > Lazarus-es en lists.lazarus.freepascal.org
>>> > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>>
>>>
>>> esta mal declarado y usado.
>>>
>>> Deberias hacerlo asi:
>>>
>>> TformX
>>> .
>>> .
>>> .
>>> .
>>> Private
>>>  ddebe, dhaber: double;
>>> end;
>>>
>>> Si lo declaras en la implementacion es como global al archivo.
>>>
>>> Self es el objeto actual en el momento de llamarlo, y le estas
>>> diciendo que Form1 se cree como pariente del objeto que trae Self. El
>>> destructor del objeto llamador se encargaria de destruir a Form1.
>>> yo lo uso de una forma mas segura
>>>
>>>  with Tform1.Create(nil)
>>>  try
>>>    Showmodal;
>>>  finally
>>>   Free;
>>> end;
>>>
>>> o
>>>  with Tform1.Create(nil)
>>>  try
>>>    Showmodal; // y en el evento oncanclose colocas:  Action := caFree;
>>>  except
>>>   Free;
>>> end;
>>>
>>>
>>> --
>>> 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.freepascal.org
>>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>
>>
>>
>>
>> --
>> Try not to become a man of success but rather to become a man of value.
Albert Einstein
>>
>> ________________________________
>>
>> _______________________________________________
>> Lazarus-es mailing list
>> Lazarus-es en lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>

Ismael tu clase tform tiene parte privada y pública, no hace falta poner
var, el var es sólo para el interior del procedimiento.

Para accede de fuera sólo lo puedes hacer si esta en el public.
Form1.mivariablepublica
Todo lo que esta en private no hace falta self.variable com en visual
basic. Sólo la variable es visible a todos loa métodos de la clase
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20130903/98e4cb6b/attachment-0002.html>


More information about the Lazarus-es mailing list