Os comento un problema que tengo y hasta ahora no he sido capaz de
solucionar.
Necesito cambiar las propiedades de un objeto a partir de una función.
De esta manera es posible:
Application:aForms[1]:Objeto:Propiedad := Valor
Pero no me parece lo mas correcto, pues debo referirme a los formularios
según un numero y veo mas adecuado referirse a el por su nombre.
Si llamo a MsgInfo de esta manera:
MSGINFO(Application:aForms[1])
En mi caso, devuelve { FrmAltas }, que es el cClassName de mi
formulario. ¿Existe alguna manera de referirse a los formularios de esta
manera?
Application:aForms['FrmAltas']:Objeto:Propiedad := Valor. Es decir,
sustituir el número de aForms, por su cClassName.
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.
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.
Referirse a un Formulario a partir de Application:aForms
Referirse a un Formulario a partir de Application:aForms
Ángel,
> Os comento un problema que tengo y hasta ahora no he sido capaz de
> solucionar.
>
> Necesito cambiar las propiedades de un objeto a partir de una función. De
> esta manera es posible:
>
> Application:aForms[1]:Objeto:Propiedad := Valor
>
> Pero no me parece lo mas correcto, pues debo referirme a los formularios
> según un numero y veo mas adecuado referirse a el por su nombre.
>
> Si llamo a MsgInfo de esta manera:
> MSGINFO(Application:aForms[1])
>
> En mi caso, devuelve { FrmAltas }, que es el cClassName de mi formulario.
> ¿Existe alguna manera de referirse a los formularios de esta manera?
>
> Application:aForms['FrmAltas']:Objeto:Propiedad := Valor. Es decir,
> sustituir el número de aForms, por su cClassName.
Me temo que no. Ten en cuenta que en este caso FrmAltas es el nombre de la
clase, y podría haber varias instancias de dicha clase, no una sola. La
única forma de hacer lo que dices es guardar la instancia del formulario en
una variable. Podrías declarar esa variable como 'PUBLIC' o 'GLOBAL', o
meterla en AppData, y usarla desde cualquier sitio del programa. P.ej:
PUBLIC oFrmAltas
oFrmAltas := TFrmAltas():New( Self )
...
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
> Os comento un problema que tengo y hasta ahora no he sido capaz de
> solucionar.
>
> Necesito cambiar las propiedades de un objeto a partir de una función. De
> esta manera es posible:
>
> Application:aForms[1]:Objeto:Propiedad := Valor
>
> Pero no me parece lo mas correcto, pues debo referirme a los formularios
> según un numero y veo mas adecuado referirse a el por su nombre.
>
> Si llamo a MsgInfo de esta manera:
> MSGINFO(Application:aForms[1])
>
> En mi caso, devuelve { FrmAltas }, que es el cClassName de mi formulario.
> ¿Existe alguna manera de referirse a los formularios de esta manera?
>
> Application:aForms['FrmAltas']:Objeto:Propiedad := Valor. Es decir,
> sustituir el número de aForms, por su cClassName.
Me temo que no. Ten en cuenta que en este caso FrmAltas es el nombre de la
clase, y podría haber varias instancias de dicha clase, no una sola. La
única forma de hacer lo que dices es guardar la instancia del formulario en
una variable. Podrías declarar esa variable como 'PUBLIC' o 'GLOBAL', o
meterla en AppData, y usarla desde cualquier sitio del programa. P.ej:
PUBLIC oFrmAltas
oFrmAltas := TFrmAltas():New( Self )
...
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
Referirse a un Formulario a partir de Application:aForms
íngel Fernández escribió:
> Application:aForms['FrmAltas']:Objeto:Propiedad := Valor. Es decir,
> sustituir el número de aForms, por su cClassName.
Bueno supongo que puedes mantener un HASH ARRAY paralelo por cClassName aunque yo prefiero una función de localización basada en
AScan (tampoco vas a tener cientos forms abiertos) así controlas también el tipo, título o parámetros propios del form.
Un saludo
Xavi
> Application:aForms['FrmAltas']:Objeto:Propiedad := Valor. Es decir,
> sustituir el número de aForms, por su cClassName.
Bueno supongo que puedes mantener un HASH ARRAY paralelo por cClassName aunque yo prefiero una función de localización basada en
AScan (tampoco vas a tener cientos forms abiertos) así controlas también el tipo, título o parámetros propios del form.
Un saludo
Xavi
Referirse a un Formulario a partir de Application:aForms
No me había percatado yo de la aclaración de José. Ahora entiendo porque
no se puede referir uno a un formulario a partir de la propiedad cClassName.
Lo he solucionado añadiendole a la propiedad Cargo, el mismo valor que
en cClassname. En principio, en mi aplicación no debería haber problema
pues mis formularios son modales y no permito que se hagan 'trastadas'
en la base de datos.
Hago un bucle con FOR, que recorre Application:aForms, y cuando la
propiedad Cargo coincide con el valor que deseo, lo asigno a una
variable, por ejemplo:
oForm:=Application:aForms[nFor]
A partir de dicha variable, modifico los objetos a mi gusto. Gracias por
las respuestas.
no se puede referir uno a un formulario a partir de la propiedad cClassName.
Lo he solucionado añadiendole a la propiedad Cargo, el mismo valor que
en cClassname. En principio, en mi aplicación no debería haber problema
pues mis formularios son modales y no permito que se hagan 'trastadas'
en la base de datos.
Hago un bucle con FOR, que recorre Application:aForms, y cuando la
propiedad Cargo coincide con el valor que deseo, lo asigno a una
variable, por ejemplo:
oForm:=Application:aForms[nFor]
A partir de dicha variable, modifico los objetos a mi gusto. Gracias por
las respuestas.
Referirse a un Formulario a partir de Application:aForms
Ángel,
> Lo he solucionado añadiendole a la propiedad Cargo, el mismo valor que en
> cClassname.
Puedes usar directamente el método ClassName, que te devuelve exactamente
eso. En el IDE aparece como cClassName precísamente para evitar coincidir
con ClassName que es un método reservado por el propio motor de objetos.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
> Lo he solucionado añadiendole a la propiedad Cargo, el mismo valor que en
> cClassname.
Puedes usar directamente el método ClassName, que te devuelve exactamente
eso. En el IDE aparece como cClassName precísamente para evitar coincidir
con ClassName que es un método reservado por el propio motor de objetos.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info