Página 1 de 1

Reutilizar codigo de formularios

Publicado: Lun May 06, 2013 10:29 am
por vgest
Existe en xailer algun mecanismo que permita reutilizar el codigo de un formulario en otro?
Un ejemplo de esta necesidad serí­a una ficha de cliente con varias paginas de foder. La funcionalidad de algunas de estas paginas puede ser similar a la de otras fichas (proveedor, articulos, etc) aunque son lo suficientemente distintas para que no proceda heredar todo de la misma clase basse.
Esto se resuelve en otros entornos con UserControls, que encapsulan el codigo de varios controles.
Como puede lograse esto en Xailer (sin recurrir al API de windows)

Reutilizar codigo de formularios

Publicado: Jue May 09, 2013 9:47 am
por jfgimenez
Victor,
> Existe en xailer algun mecanismo que permita reutilizar el
> codigo de un formulario en otro?
>
> Un ejemplo de esta necesidad serí­a una ficha de cliente con
> varias paginas de foder. La funcionalidad de algunas de
> estas paginas puede ser similar a la de otras fichas
> (proveedor, articulos, etc) aunque son lo suficientemente
> distintas para que no proceda heredar todo de la misma clase
> basse.
Si son lo suficientemente distintos como para no poder heredar, entonces
no hay tampoco mucho que reutilizar, supongo. No obstante, puede ocurrir
que haya alguna rutina concreta (p.ej. algún cálculo) que sí­ se repita
en distintas fichas. En ese caso, tenemos varias opciones:
1) Hacer una función o procedimiento que reciba como parámetro el objeto
que lo llama, de forma que pueda actuar sobre sus propiedades. Los
controles de un formulario son también propiedades de éste, así­ que
podrí­a también modificarlos. P.ej., supongamos que queremos que al
escribir el código postal, una rutina se encargue de rellenar el nombre
del municipio, la provincia y el prefijo telefónico. En el evento OnExit
del código postal podrí­amos llamar a una rutina externa así­:
ValidarCodigoPostal( Self )
Y esa rutina serí­a algo así­:
FUNCTION ValidarCodigoPostal( oForm )
// Buscar el código postal y obtener los datos necesarios
oForm:oMunicipio:Value := <nombre del municipio>
oForm:oProvincia:Value := <nombre de la provicia>
oForm:oTelefono:Value := <prefijo telefonico>
RETURN .T.
2) Crear una clase base que incluya las rutinas comunes, en forma de
métodos, y después crear las demás clases derivando de la clase base.
Serí­a algo muy parecido al anterior, con la diferencia de que las
rutinas serí­an métodos, y no habrí­a que pasarles como parámetro el
objeto formulario, ya que serí­a Self.
3) Hay un mecanismo para poder usar un método de una clase desde otra
clase, declarándolo como METHODPUB. Pero este mecanismo no es estándar,
y podrí­a verse afectado o incluso desaparecer en el futuro, así­ que está
absolutamente desaconsejado.
> Esto se resuelve en otros entornos con UserControls, que
> encapsulan el codigo de varios controles.
¿Cómo funcionan esos UserControls?
> Como puede lograse esto en Xailer (sin recurrir al API de
> windows)
No entiendo qué relación tiene esto con el API de Windows. Si he
entendido bien el problema, se limita a relaciones entre clases, pero el
API no tiene nada que ver.
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

Reutilizar codigo de formularios

Publicado: Jue May 09, 2013 10:32 am
por vgest

Muchas gracias por tus sugerencias
El problema concreto es cuando se ha hacho una ventana independiente que tiene una funcionalidad compleja (Por ejemplo una gestion de graficos TRMChart, que es el caso), y se desea que esta aparezca en una pagina de folder de fichas de clientes, articulos, etc.
Heredar de una clase base es buena idea, pero no se puede si la clase que contiene la funcionalidad es ya un formulario (Porque actua tambien como una ventana independiente). No se puede insertar una clase base comun a un formulario y a otro tipo de controles.
Tampoco hay forma, que sepamos, de meter un formulario en una pagina de folder a nivel prg. (Por eso decia lo del API, con SetParent si se puede lograr, pero es en un lio impresionante)
En ultimo caso, usaremos el sistema que comentas de llamar a una funcion pasando el control, pero no es lo mas elegante.
Un saludo
Victor

Reutilizar codigo de formularios

Publicado: Jue May 09, 2013 10:43 am
por jfgimenez
Victor,
> Muchas gracias por tus sugerencias
>
> El problema concreto es cuando se ha hacho una ventana
> independiente que tiene una funcionalidad compleja (Por
> ejemplo una gestion de graficos TRMChart, que es el caso), y
> se desea que esta aparezca en una pagina de folder de fichas
> de clientes, articulos, etc.
>
> Heredar de una clase base es buena idea, pero no se puede si
> la clase que contiene la funcionalidad es ya un formulario
> (Porque actua tambien como una ventana independiente). No se
> puede insertar una clase base comun a un formulario y a otro
> tipo de controles.
>
> Tampoco hay forma, que sepamos, de meter un formulario en
> una pagina de folder a nivel prg. (Por eso decia lo del API,
> con SetParent si se puede lograr, pero es en un lio
> impresionante)
Sí­ se puede. Echa un vistazo al ejemplo datacontrolsdbfdata6. Verás que
se están usando formularios diseñados con el IDE dentro de pestañas de
un folder.
En el caso concreto que planteas, lo mejor serí­a crear un control
"contenedor" que permita incrustar esos formularios en un folder o donde
quieras. Puedes basarte en el código del ejemplo para hacerlo. También
aprovecho para comentar que se está organizando un curso de creación de
controles en Xailer, donde se podrí­a abordar este tema. Si estás
interesado puedes contactar con Bingen, que es quien lo está organizando.
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

Reutilizar codigo de formularios

Publicado: Jue May 09, 2013 2:26 pm
por zeasoftware
Yo lo que hago es hacer una función, mas o menos así­:
Function LeeClientes( cparam1, cparam2 )
Local Self := QSelf()

With Object ::oDBFClientes
:Seek(cParam1)
:::::
End
Return ( Nil )
y en la clase lo declaro:
Method BuscaCliente( cParam1, cParam2 ) Extern LeeClientes
y para llamarlo:
:BuscaCliente( “00001” ) //los parámetros son opcionales....
Espero te ayude.
Saludos.
Ramón Zea
Móvil.: 993-231.62.29
Tel./Fax: 993-353-46-73
www.zeasoftware.com.mx
soporte@zeasoftware.com.mx
zeasoftware@hotmail.com
Aliado FACTURAXION
"victor" escribió en el mensaje de noticias:518769dc$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Existe en xailer algun mecanismo que permita reutilizar el
codigo de un formulario en otro?
Un ejemplo de esta necesidad serí­a una ficha de cliente con
varias paginas de foder. La funcionalidad de algunas de
estas paginas puede ser similar a la de otras fichas
(proveedor, articulos, etc) aunque son lo suficientemente
distintas para que no proceda heredar todo de la misma clase
basse.
Esto se resuelve en otros entornos con UserControls, que
encapsulan el codigo de varios controles.
Como puede lograse esto en Xailer (sin recurrir al API de
windows)
--