oObj1:xData := oObj2:xData := oObjn:xData := xValue
IMHO: Sería bueno disponer de esta faculta en todas las propiedades por coherencia con el lenguaje.
En las que utilizo si no esta implementado las voy cambiando.
CLASS TToolButton FROM XToolButton
PROPERTY lVisible WRITE INLINE Super:lVisible := Value, Value
ENDCLASS
Pero al ver las fuentes creo que sería bueno incorporarlo genéricamente.
CLASS XToolButton FROM TComponent
....
PROPERTY cText INIT "" WRITE INLINE ::SetInfo( Value ), Value
PROPERTY nImage INIT 0 WRITE INLINE ::SetInfo( , Value ), Value
PROPERTY lSeparator INIT .F. WRITE INLINE ::SetInfo( ,, Value ), Value
PROPERTY lAutoSize INIT .F. WRITE INLINE ::SetInfo( ,,, Value ), Value
PROPERTY lGroup INIT .F. WRITE INLINE ::SetInfo( ,,,, Value ), Value
....
PROPERTY lEnabled INIT .T. WRITE INLINE IIf( Value, ::Enable(), ::Disable() ), Value
PROPERTY lVisible INIT .T. WRITE INLINE IIf( Value, ::Show(), ::Hide() ), Value
PROPERTY lChecked INIT .F. WRITE INLINE IIf( Value, ::Check(), ::Uncheck() ), Value
....
Un saludo
Xavi
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.
Concatenación de operadores
Concatenación de operadores
xAvi,
> oObj1:xData := oObj2:xData := oObjn:xData := xValue
>
> IMHO: Sería bueno disponer de esta faculta en todas las propiedades por
> coherencia con el lenguaje.
Este es el comportamiento estándar de Clipper/Harbour, a no ser que haya
algún bug en la última revisión de Harbour.
> En las que utilizo si no esta implementado las voy cambiando.
¿ Qué quieres conseguir con este cambio ?
> Pero al ver las fuentes creo que sería bueno incorporarlo genéricamente.
> CLASS XToolButton FROM TComponent
La asignación de la propiedad se hace en el método SetInfo, por lo que no
entiendo para qué quieres poner Value en el stack. Estás "apilando" un
valor que luego no te sirve para nada.
Saludos,
José Lalín
> oObj1:xData := oObj2:xData := oObjn:xData := xValue
>
> IMHO: Sería bueno disponer de esta faculta en todas las propiedades por
> coherencia con el lenguaje.
Este es el comportamiento estándar de Clipper/Harbour, a no ser que haya
algún bug en la última revisión de Harbour.
> En las que utilizo si no esta implementado las voy cambiando.
¿ Qué quieres conseguir con este cambio ?
> Pero al ver las fuentes creo que sería bueno incorporarlo genéricamente.
> CLASS XToolButton FROM TComponent
La asignación de la propiedad se hace en el método SetInfo, por lo que no
entiendo para qué quieres poner Value en el stack. Estás "apilando" un
valor que luego no te sirve para nada.
Saludos,
José Lalín
Concatenación de operadores
José Lalín escribió:
> ¿ Qué quieres conseguir con este cambio ?
Por ejemplo.-
WITH OBJECT ::oTB // Class TToolBar
...
:aItems[2]:lVisible := :aItems[3]:lVisible := FALSE // Class TToolButton
...
END
> La asignación de la propiedad se hace en el método SetInfo, por lo que
> no entiendo para qué quieres poner Value en el stack. Estás "apilando"
> un valor que luego no te sirve para nada.
Lo mismo pero más simple que cambiar hb_ret() en SetInfo
Un saludo
Xavi
> ¿ Qué quieres conseguir con este cambio ?
Por ejemplo.-
WITH OBJECT ::oTB // Class TToolBar
...
:aItems[2]:lVisible := :aItems[3]:lVisible := FALSE // Class TToolButton
...
END
> La asignación de la propiedad se hace en el método SetInfo, por lo que
> no entiendo para qué quieres poner Value en el stack. Estás "apilando"
> un valor que luego no te sirve para nada.
Lo mismo pero más simple que cambiar hb_ret() en SetInfo
Un saludo
Xavi
Concatenación de operadores
xAvi,
> :aItems[2]:lVisible := :aItems[3]:lVisible := FALSE // Class
Este tipo de asignación está directamente soportada por el compilador, no
hace falta que cambies nada en los fuentes para esto.
> Lo mismo pero más simple que cambiar hb_ret() en SetInfo
Fíjate que SetInfo() asigna mediante XA_ObjSend...() el valor directamente
a la propiedad, por lo que no hace falta devolver con hb_ret().
Saludos,
José Lalín
> :aItems[2]:lVisible := :aItems[3]:lVisible := FALSE // Class
Este tipo de asignación está directamente soportada por el compilador, no
hace falta que cambies nada en los fuentes para esto.
> Lo mismo pero más simple que cambiar hb_ret() en SetInfo
Fíjate que SetInfo() asigna mediante XA_ObjSend...() el valor directamente
a la propiedad, por lo que no hace falta devolver con hb_ret().
Saludos,
José Lalín
Concatenación de operadores
José Lalín escribió:
>
> Este tipo de asignación está directamente soportada por el compilador,
> no hace falta que cambies nada en los fuentes para esto.
Perdona pero para que el copilador haga ese tipo de asignaciones la PROPERTY (DATA) no tendría que estar asociada a ningún
METHOD (Función, CodeBlock) con la clausula WRITE, si es así, es responsabilidad del METHOD el devolver el valor para poder
concatenar operadores. Si devuelve nil o tipos incompatibles provocará error. Basta con que lo pruebes a programar sin mis
cambios para ver el error, al menos con mis versiones de trabajo: Xailer Version 1.75 y xHarbour build 0.99.80 Intl. (SimpLex).
Un cordial saludo
Xavi
>
> Este tipo de asignación está directamente soportada por el compilador,
> no hace falta que cambies nada en los fuentes para esto.
Perdona pero para que el copilador haga ese tipo de asignaciones la PROPERTY (DATA) no tendría que estar asociada a ningún
METHOD (Función, CodeBlock) con la clausula WRITE, si es así, es responsabilidad del METHOD el devolver el valor para poder
concatenar operadores. Si devuelve nil o tipos incompatibles provocará error. Basta con que lo pruebes a programar sin mis
cambios para ver el error, al menos con mis versiones de trabajo: Xailer Version 1.75 y xHarbour build 0.99.80 Intl. (SimpLex).
Un cordial saludo
Xavi
Concatenación de operadores
Xavi,
> oObj1:xData := oObj2:xData := oObjn:xData := xValue
>
> IMHO: Sería bueno disponer de esta faculta en todas las propiedades por
> coherencia con el lenguaje.
Tienes razón, y de hecho está así en unos sitios, aunque en otros no. En los
que no está es o bien porque se nos ha pasado, o bien porque afectan a la
velocidad (el simple hecho de copiar un valor a la pila consume algo de
tiempo), y muchas veces es preferible escribir un poquito más de código a
cambio de un mejor rendimiento. No obstante, lo tendremos en cuenta, y donde
consideremos que vale la pena y aún no está puesto lo podremos.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
> oObj1:xData := oObj2:xData := oObjn:xData := xValue
>
> IMHO: Sería bueno disponer de esta faculta en todas las propiedades por
> coherencia con el lenguaje.
Tienes razón, y de hecho está así en unos sitios, aunque en otros no. En los
que no está es o bien porque se nos ha pasado, o bien porque afectan a la
velocidad (el simple hecho de copiar un valor a la pila consume algo de
tiempo), y muchas veces es preferible escribir un poquito más de código a
cambio de un mejor rendimiento. No obstante, lo tendremos en cuenta, y donde
consideremos que vale la pena y aún no está puesto lo podremos.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
Concatenación de operadores
xAvi,
ahora sí que he entendido lo que querías decir. Con tu primer ejemplo
pensaba que el error aparecía en cualquier concatenación y de ahí mi sorpresa.
Saludos,
José Lalín
ahora sí que he entendido lo que querías decir. Con tu primer ejemplo
pensaba que el error aparecía en cualquier concatenación y de ahí mi sorpresa.
Saludos,
José Lalín