In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Reutilizar codigo de formularios

Foro público de Xailer en español
Responder
vgest
Mensajes: 32
Registrado: Lun Jul 30, 2012 5:06 pm

Reutilizar codigo de formularios

Mensaje 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)
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Reutilizar codigo de formularios

Mensaje 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
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
vgest
Mensajes: 32
Registrado: Lun Jul 30, 2012 5:06 pm

Reutilizar codigo de formularios

Mensaje 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
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Reutilizar codigo de formularios

Mensaje 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
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
zeasoftware
Mensajes: 1831
Registrado: Mar Oct 11, 2005 9:53 am

Reutilizar codigo de formularios

Mensaje 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)
--
Responder