Rebar y Toolbars XP

Rebar y Toolbars XP

Postby jmartial » Fri Mar 31, 2006 7:50 am

Antonio,

Necesitaría como en las barras de botones, dejar pulsado un botón, me parece recordar que dijiste que todavía no está implementado, pero me hace bastante falta.

¿Alguien me podría dar alguna pista de que mensaje o función del api debería buscar para conseguirlo?

Mi idea es provisionalmente, añadir un método que lo haga.

Un Saludo,
Joaquín
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby jmartial » Fri Mar 31, 2006 7:52 am

Perdón,

En la frase "como en la barra de botones", me refería a la antigua, a la que siempre ha llevado implementada fw.

Un saludo,
Joaquín
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby Antonio Linares » Fri Mar 31, 2006 8:37 am

Joaquín,

Añade este método a la clase TToolBar:

#define TB_SETSTATE 1041
#define TBSTATE_PRESSED 2
#define TBSTATE_ENABLED 4

METHOD SetPressed( nButton, lOnOff ) INLINE ;
::SendMsg( TB_SETSTATE, nButton, If( lOnOff, TBSTATE_PRESSED, TBSTATE_ENABLED ) )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42126
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby jmartial » Fri Mar 31, 2006 10:32 am

Antonio,

Gracias por darme una idea, pero ese método no hace lo deseado, aparte de que deja el botón deshabilitado.

A partir de esa idea, he creado 2 métodos que Sí hacen exactamente lo que buscaba y lo que hacía la antigua toolbar.

Espero que te guste la implementación.

#define TB_CHECKBUTTON (WM_USER + 2)
#define TBSTATE_CHECKED 0x01
#define TB_SETSTATE 1041
#define TBSTATE_ENABLED 4
#define TB_ISBUTTONCHECKED (WM_USER + 10)


METHOD SetChecked( nButton, lOnOff ) INLINE ;
If( lOnOff, ::SendMsg( TB_CHECKBUTTON, nButton, TBSTATE_CHECKED ),;
::SendMsg( TB_SETSTATE, nButton, TBSTATE_ENABLED ) )

METHOD IsChecked( nButton ) INLINE ;
if(::SendMsg( TB_ISBUTTONCHECKED, nButton, 0 )==0, .F., .T. )


Un Saludo,
Joaquín
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby jmartial » Fri Mar 31, 2006 10:45 am

Antonio,

Si te ha parecido bien y vas a añadirlo a la clase, mira si sería posible este método también, lo veo bastante útil:


//----- Pone el estado de un botón de la manera inversa a la que está

METHOD lChekOnOff( nButton ) INLINE if( ::IsChecked( nButton ), ;
( ::SetChecked( nButton, .F. ),.F.),;
( ::SetChecked( nButton, .T. ),.T.) )


Un Saludo,
Joaquín
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby Antonio Linares » Fri Mar 31, 2006 11:53 am

Joaquín,

Gracias,

Este se puede simplificar así:

METHOD IsChecked( nButton ) INLINE ::SendMsg( TB_ISBUTTONCHECKED, nButton ) != 0
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42126
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Fri Mar 31, 2006 11:55 am

Joaquín,

Y lChekOnOff() queda mejor así:

METHOD ToggleCheck( nButton ) INLINE ::SetCheck( nButton, ! ::IsChecked( nButton ) )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42126
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby jmartial » Fri Mar 31, 2006 12:18 pm

Antonio,

en el método

METHOD ToggleCheck( nButton ) INLINE ::SetCheck( nButton, ! ::IsChecked( nButton ) )


::SetCheck( nButton, ! ::IsChecked( nButton ) ) ¿que devuelve? porque se necesita que devuelva el estado en que queda el botón.

Que traducción tiene la palabra Toggle ¿Cambio de estado?

Un Saludo,
Joaquín
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby Antonio Linares » Fri Mar 31, 2006 12:33 pm

Joaquín,

Sí, Toggle significa conmutar, cambiar.

Para que necesitas que devuelva el valor ? Lo puedes obtener con IsChecked()
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42126
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby jmartial » Fri Mar 31, 2006 12:37 pm

Antonio,

es muy importante, si tengo una data que me indica un estado por ejemplo en mi caso ::lBold y la oToolbar es una variable local, que no uso en ninguna otra parte, en el action del botón pongo

::lBold := oToolbar:ToggleCheck( 1 ) // Por ejemplo


Por eso, te lo pasé de esa manera el INLINE, y así es como le veo más utilidad y no veo que repercuta en ninguna otra cosa.

Un Saludo,
Joaquín
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby Antonio Linares » Fri Mar 31, 2006 12:45 pm

Joaquín,

Es lo mismo que hacer:

oToolbar:ToggleCheck( 1 )
::lBold := oToolbar:IsChecked( 1 )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42126
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby jmartial » Fri Mar 31, 2006 12:47 pm

Antonio,

Antes me hablabas de simplificar, y ahora quieres que use 2 métodos??

Ya sé que como dices funciona, pero trataba que fuera más legible el action de un botón por ejemplo.



Un Saludo,
Joaquín
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby jmartial » Fri Mar 31, 2006 12:47 pm

Aparte,

¿Cual es el inconveniente que le ves a que devuelva el estado en que queda?


Un Saludo,
Joaquín
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby Antonio Linares » Fri Mar 31, 2006 12:49 pm

Joaquín,

No hay ningún inconveniente, sencillamente son acciones distintas. Pero si te empeñas, lo dejamos como quieras :)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42126
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby jmartial » Fri Mar 31, 2006 12:53 pm

Antonio gracias,

pero yo valoro mucho tu opinión en estos campos, por eso me gusta que no le veas nada negativo.

Porque si al final va a ser más negativo que positivo el cambio, tampoco es cuestión de encabezonarse :-)

Sí lo ves bien, prefiero que devuelva el estado.


Un Saludo,
Joaquín
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 95 guests