Maestro Manuel, Bug en TSBUTTON

Post Reply
Cgallegoa
Posts: 497
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Has thanked: 1 time
Been thanked: 1 time
Contact:

Maestro Manuel, Bug en TSBUTTON

Post by Cgallegoa »

Hola Maestro Manuel:

En la última versión encontré dos novedades, podrías decirme cómo solucionarlas ?

1.- Si tienes un Diálogo armado con RECURSOS, con varios botones y te mueves con la tecla TAB, el botón que toma el foco pintaba un recuadro punteado indicándote que tiene el foco. Con la última versión que amablemente me enviaste ya no pinta el recuadro y no se sabe en cuál botón está el foco.

Cómo puedo hacer para que vuelve a pintar el recuadro. ?


2.- Si tomas el ejemplo NEWSHAPE.PRG y haces la siguiente modificación:

En la línea 94 cambias

Code: Select all | Expand

@155, 45 SBUTTON aBtn[ 8 ] PROMPT "escucha" RESOURCE "Audib" OF oDlg ;
             COLORS CLR_WHITE, nRGB( 255, 85, 0 ) SIZE 30, 35 PIXEL SUNSET TEXT ON_TOP FONT oFont

por

Code: Select all | Expand

@155, 45 SBUTTON aBtn[ 8 ] PROMPT "escucha1" RESOURCE "Audib" OF oDlg ;
            COLORS CLR_WHITE, nRGB( 255, 85, 0 ) SIZE 30, 35 PIXEL SUNSET TEXT ON_TOP FONT oFont;
            ACTION (iif(aBtn[ 9 ]:lActive,aBtn[9]:Disable(),aBtn[9]:Enable()),;
                    aBtn[ 9 ]:Refresh(.T.))


y agregas despues de definido el SBUTTON aBtn[ 9 ]

Code: Select all | Expand

aBtn[ 9 ]:Disable()


Cuando la aplicación entra, el aBtn[ 9 ] está disable y pinta los contornos del botón redondos. Perfecto

Pero si pulsas sobre el botón aBtn[ 8 ] para que lo active y luego pulsas nuevamente para que lo desactive entonces pinta los bordes en ángulo recto. Pierde el efecto Round.

Si quitas aBtn[ 9 ]:Disable(), al iniciar el botón está activo. Si pulsas aBtn[ 8 ], los desactiva y pinta los bordes en ángulo recto. Pierde el efecto Round.

Estos son botones estilo SUNSET. Lo mismo pasa con el estilo CRYSTAL.

Cómo lo soluciono ?

De igual manera en el ejemplo TESTBTN.PRG en el botón "Buttons from code", al pulsar el botón "Activate", para que active los botones del diálogo, entre los que está uno REDONDO, yl pulsarlo otra vez para que desactive, el botón REDONDO pinta un marco blanco cuando está desactivado.

Cómo lo soluciono ?

Por otro lado, qué uso le das a la clase TSGRADIE ?

Saludos,

Carlos Gallego
Ruben D. Fernandez
Posts: 189
Joined: Sun Jul 08, 2007 1:46 am
Location: Uruguay

Post by Ruben D. Fernandez »

Estimado Manuel:

Aprovechando... le hago una consulta:

Es posible que con la clausula CRYSTAL el caption del TSBUTTON
quede en el medio y no en la linea de abajo?
(Usado como boton , no el la tsbar)

Saludos y Gracias

Ruben Fernandez
Cgallegoa
Posts: 497
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Has thanked: 1 time
Been thanked: 1 time
Contact:

Post by Cgallegoa »

Mestro, alguna guía será bienvenida.

Saludos,

Carlos Gallego
Cgallegoa
Posts: 497
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Has thanked: 1 time
Been thanked: 1 time
Contact:

Post by Cgallegoa »

Maestro Manuel, ayudaaaaaaaa..... :cry:

Con el fin de no molestarte le he dado la vuelta por todos los lados, pero no consigo solucionar el pintado del recuadro cuando un botón tiene el foco. La mayoría de los usuarios se mueven entre los controles de una ventana o un díalogo con la tecla Tabs, y para esto es vital saber en dónde está el foco. Si tienes varios botones y el foco está en alguno de ellos quedas perdido porque no sabes en cuál está. :?

Por favor dame una guía de cómo solucionarlo. Sólo una pìsta, yo hago el resto.

Gracias y saludos,

Carlos Gallego
User avatar
mmercado
Posts: 782
Joined: Wed Dec 19, 2007 7:50 am
Location: Salamanca, Gto., México

Post by mmercado »

Hola Carlos:

Discúlpame, había estado unos días ausente de los foros, déjame analizar el problema y seguramente encontraremos una solución.

Un abrazo.

Manuel Mercado
Cgallegoa
Posts: 497
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Has thanked: 1 time
Been thanked: 1 time
Contact:

Post by Cgallegoa »

Gracias Maestro, quedo a la espera.

Un abrazo,

Carlos Gallego
Cgallegoa
Posts: 497
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Has thanked: 1 time
Been thanked: 1 time
Contact:

Maestro Manuel, Bug en TSBUTTON - Posible solución

Post by Cgallegoa »

Maestro Manuel

Una posible solución al pintado del cuadro cuando un botón tiene el foco es cambiando en el Method Paint:

Erróneo:

Code: Select all | Expand

lFocused := If( ! lAnd( ::nStyle, WS_TABSTOP ) .or. ;
                     cClassName == "TBAR" .or.;
                     cClassName == "TSBAR" .or. ;
                     nShape == 2 .or. ::lDrag, .F., lFocused )
Parece que no está definiendo ::nStyle cuando es desde recursos, por lo que " ! lAnd( ::nStyle, WS_TABSTOP ) " será siempre Falso

Correcto:

Code: Select all | Expand

lFocused := If( ! lAnd( GetWindowLong( ::hWnd, GWL_STYLE ), WS_TABSTOP ) .or.;
                     cClassName == "TBAR" .or.;
                     cClassName == "TSBAR" .or. ;
                     nShape == 2 .or. ::lDrag, .F., lFocused )

Aparentemente funciona bien. Pinta el recuadro cuando un botón tiene el foco.

Podrías confirmarme si es correcto el cambio ?

Queda pendiente de solucionar el pintado cuando los botones tienen el atributo ROUNDED y se intercambia entre Disable() y Enable().

Gracias y un abrazo,

Carlos Gallego
Post Reply