[Lazarus-es] devolver valor de un form

Eduardo Lopez dar_alle en yahoo.com.ar
Mar Jun 16 01:51:27 CEST 2009


Ok. Entendí perfectamente.
Muchas gracias!!
Slds. Eduardo.

Carlos German Tejero escribió:
> En progrmación orientada a objetos uno de los puntos fuertes es la 
> encapsulación. Al declarar un atributo publico, perdemos el control 
> sobre lo que se hace sobre el. Que pasaria si el dia de mañana 
> necesitamos tomar una acción cuando se lee el valor del atributo? Con 
> un atributo publico no podemos. Para eso en ObjectPascal existen la 
> propiedades, que nos permiten mantener la interface de un objeto a 
> pesar de haber cambiado internamente. Por ejemplo si necensitamos un 
> atributo que se pueda leer y escribir y no tomar ninguna accion cuando 
> eso sucede:
>
> MiClase = class(TObject)
> private
>  FAttr:integer;
> published //Published si necesitamos RTTI, sino public
>  property Attr:integer read FAttr write FAtrr;
> end;
>
> Ahora si los requerimientos cambian y necesitamos tomar una accion al 
> asignar un valor a la propiedad simplemente hacemos:
>
> MiClase = class(TObject)
> private
>  FAttr:integer;
>  procedure SetAttr(AAtrr:integer);
> published //Published si necesitamos RTTI, sino public
>  property Attr:integer read FAttr write SetAttr;
> end;
>
> procedure MiClase.SetAttr(AAtrr:integer);
> begin
>   AlgunaAccion();
>   FAtrr := AAtrr;
> end;
>
> Con lo que hemos modificado el comportamiento sin modificar la 
> interface. Otra cosa es que las propiedades nos permiten tener 
> atributos de solo lectura o solo escritura, que de otra forma no lo 
> podemos controlar.
> Saludos.
>
> El 13 de junio de 2009 22:24, Eduardo Lopez <dar_alle en yahoo.com.ar 
> <mailto:dar_alle en yahoo.com.ar>> escribió:
>
>     Muchas gracias por los apuntes.
>     Me queda una duda. ¿Cuáles serían los riesgos  de declarar
>     atributos públicos en una clase?
>     Desde ya, muchas gracias.
>     Eduardo.
>     Carlos German Tejero escribió:
>
>         Buenas a todos, si se me permite quiciera hacer un par de
>         comentarios con respecto a esta solucion, espero sumar y no
>         incomodar:
>
>         1.- Cuando usamos formularios modales y necesitamos retornar
>         un valor sobre la eleccion del usuario, tenemos a nuestra
>         disposicion la propiedad ModalResult. Por ejemplo, le ponemos
>         al form dos TBitBtn uno con ModalResult = mrYes y el otro con
>         ModalResult = mrCancel, entoces hacemos:
>         Form := TForm.Create(nil);
>         if(Form.ShowModal = mrYes)then
>          Algo
>         else
>          OtraCosa
>
>         2.- Nunca olvidemos que estamos usando ObjectPascal que es
>         progrmacion orientada a objetos hibrida, no es una buena
>         practica declarar un atributo publico en una clase, para tener
>         el control total deberiamos hacer lo siguiente:
>         private
>          ...
>          FArtId:integer;
>          ...
>         pubblished
>          ...
>          property ArtId:integer read FArtId; //Solo lectura desde afuera
>          ...
>          3.- Y por ultimo esta es mas personal que otra cosa mucho,
>         personamente nunca uso Objecto.Free para liberar un objeto,
>         siempre uso FreeAndNil(Objeto). La razon de eso es que en
>         realidad, y dependiendo del memory manager que estemos usando,
>         cuando liberamos la memoria esta solo es marcada como libre,
>         pero nuestro puntero o referencia sigue apuntando alli, lo que
>         puede producir que en ocasiones el siguiente codigo erroneo
>         funcione y pase desapercibido:
>         ...
>         Obj  := TObj.Create;
>         ...
>         Obj.Free;
>         ...
>         Obj.Algo;
>         ...
>
>         Si utilizamos FreeAndNil este codigo jamas podria pasar funcionar.
>         Saludos.
>
>         El 12 de junio de 2009 22:06, Eduardo Lopez
>         <dar_alle en yahoo.com.ar <mailto:dar_alle en yahoo.com.ar>
>         <mailto:dar_alle en yahoo.com.ar <mailto:dar_alle en yahoo.com.ar>>>
>         escribió:
>
>
>            Hola... así lo resolví yo, quizás haya alguna forma mejor, pero
>            esto es lo que hice:
>
>            En el botón que llama al Formulario de búsquedas tengo lo
>         siguiente:
>
>            procedure TFormMovStock.BotonBuscaArticuloClick(Sender:
>         TObject);
>            begin
>               FormBuscaArticulo := TFormBuscaArticulo.Create(nil);
>                try
>                  FormBuscaArticulo.ShowModal;
>                finally
>                  begin
>                    if FormBuscaArticulo.pAceptoForm then
>                       Spin_ART_ID.Value:=FormBuscaArticulo.pART_ID
>                    else Spin_ART_ID.Value:=0;
>                    FormBuscaArticulo.Free;
>                    Spin_ART_ID.SetFocus;
>                   end
>                end;
>            end;
>
>            En el formulario de búsqueda propiamente habilité dos
>         propiedades
>            públicas para llenarlas con la respuesta y poder
>         "retornarlas" al
>            llamador:
>
>
>             procedure FormShow(Sender: TObject);
>             private
>              { private declarations }
>             public
>              pART_ID : Integer;
>              pAceptoForm : Boolean;
>
>              { public declarations }
>
>
>
>            Obviamente en botón Seleccionar del Formulario de búsqueda
>         indico
>            el pART_ID marcado y pongo pAceptoForm en verdadero y cierro el
>            formulario.
>            El proceso llamador pregunta por los valores y finalmente
>         destruye
>            el formulario de búsqueda.
>
>            Saludos.
>            Eduardo
>
>
>            Paola Bruccoleri escribió:
>
>                Hola...
>
>                tengo un form con la lista de clientes; Quiero que se
>         devuelva
>                el numero de cliente cuando se salga de ese form
>                Ese form va a ser usado desde otros forms, donde se
>         pida como
>                dato el cliente y haya que buscarlo. Uso para eso un
>                editbutton, de tal forma que al hacer clic en el botoncito
>                aparezca la ventana de busqueda, y cuando retorne, tenga el
>                código ya escrito en el campo.
>                En algunas épocas use una variable global con el codigo
>                elegido, pero no me gusta nada ese sistema.
>                He pensado en usar una variable publica de la clase
>                TListaClientes, pero no tengo todavía muy claro como
>         hacerlo.
>                Alguna idea??
>                chauuuuuuuuuuuuuu
>
>                =======================
>                A/P Paola Bruccoleri Arrambide
>                San José de Mayo - San José - URUGUAY
>
>                Blog: http://paolabruccoleri.reducativa.com
>                Portal Educativo: http://www.reducativa.com.uy
>                Wiki: http://wiki.reducativa.com
>                Material sobre las XO:
>              
>          http://www.reducativa.com/wiki/index.php?title=Proyecto_OLPC_-_Plan_Ceibal
>
>                Cartillas XO Sugar 8.2:
>              
>          http://www.reducativa.com/wiki/index.php?title=Cartillas_sobre_uso_de_la_XO
>
>
>
>                _______________________________________________
>                Lazarus-es mailing list
>                Lazarus-es en lists.lazarus.freepascal.org
>         <mailto:Lazarus-es en lists.lazarus.freepascal.org>
>                <mailto:Lazarus-es en lists.lazarus.freepascal.org
>         <mailto: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
>         <mailto:Lazarus-es en lists.lazarus.freepascal.org>
>            <mailto:Lazarus-es en lists.lazarus.freepascal.org
>         <mailto:Lazarus-es en lists.lazarus.freepascal.org>>
>
>            http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>
>
>
>
>         -- 
>         Carlos Germán Tejero
>         ------------------------------------------------------------------------
>
>
>
>         _______________________________________________
>         Lazarus-es mailing list
>         Lazarus-es en lists.lazarus.freepascal.org
>         <mailto: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
>     <mailto:Lazarus-es en lists.lazarus.freepascal.org>
>     http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>
>
>
>
> -- 
> Carlos Germán Tejero
> ------------------------------------------------------------------------
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>   





More information about the Lazarus-es mailing list