[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