FoxPress – Mayo 2001

 

Barra de Herramientas redimensionable                   barra.zip

http://www.fpress.com/

 

Por Alberto Rodriguez 

 



La Barras de herramientas es una opción que el mundo windows tiene muy introducido y prueba de ello es que todas las aplicaciones de Microsoft las usan. No sólo las usan sino que han llegado a crear un estándar.

 

          Del mismo modo que en los coches al principio los cambios de marchas, en ocasiones estaban en el volante o incluso unos para introducir una marchar debían mover el cambio de marchas en una dirección y otros en otra, con el tiempo se ha ido unificando y ahora practicamente se usa el mismo sistema en todos los modelos y marcas.

 

          Con las barras de herramientas ha ido sucediendo algo parecido y ahora se puede decir que la propuesta de Microsoft es la que ha creado el estándar.  El primer botón es el de nuevo, el segundo es el de abrir, el tercero el de guardar, etc... Y siempre con los mismo iconos de esa forma el usuario se siento cómodo pues conoce el entorno en el que está.

 

          Cuando al desarrollar una aplicación te propones que esa aplicación consiga el logotipo de windows, una de las cosas que más llama la atención es el requisito de Microsoft de que el usuario pueda usar botones grandes y botones pequeños en la barra de herramientas. Tengo que reconocer que al principio no le hacía mucho caso a esto pero como estaba implementado en una de mis aplicaciones, cuando visitaba a los clientes para hacer mantenimiento me di cuenta de que casi todos tenían puestas los botones grandes. Fue eso lo que me decidió a incorporar esta opción siempre a mis aplicaiones y crearme una estructura básica que permitiera hacerlo de forma fácil.

 

          En las primeras aplicaciones que hice creaba dos barras de herramientas y usaba una u otra según las necesidades pero en determinado momento descubrí que los objetos eran redimensionables en tiempo de ejecución y eso me llevó a eliminar una de las barras y redimensionar la otra según las necesidades.

 

          La propiedad que me detecta los cambios es de tipo Assign (también otra cosa que cuando la descubres te entusiasmas) pues te permite ejecutar un método asociado a esa propiedad cuando cambia de valor: eso es lo que hice, cuando cambia de valor la opción de botones grandes/botones pequeños en el método Assign de esa propiedad cambio el tamaño de los botones.

 

          Lo mejor, como siempre, es correr el fuente y mirarlo con detalle. Cuando lo ejecutes, vete a la opción de Ver/Baras de Herramientas del menú y cambia el valor indicando botones grandes/pequeños y verás como se produce el cambio.

 

          Las diferencias de uno y otro son para la barra de herramientas pequeña:

 

 

 

Y para la barra de herramientas grande:

 

 

             No quiero trascribir aquí todo el código pues se haría bastante pesado y dificil de leer sobre todo teniendo el código en los fuentes, pero el ‘cogollo’ del asunto como he dicho está en el Assign de la propiedad del tamaño del botón que a continuación trascribo:

 

If VarType(llValor) = "L"  And  m.llValor # This.lGrande

     

      Store .T. To This.LockScreen, _Screen.LockScreen

 

      This.lGrande = m.llValor

      Local o

      For Each o In This.Controls

              If m.o.BaseClass == "Commandbutton"

                      This.AjustarBoton( m.o )

              EndIf

      EndFor

 

      Store .F. To This.LockScreen, _Screen.LockScreen

 

EndIf

 

En este código se ve como bloqueo la pantalla antes de hacer los ajustes y posteriormente la desbloqueo de esta forma no se producen efectos raros en la pantalla (movimientos hacia arriba y abajo).

 

             El método AjustarBoton es el que realiza el trabajo sucio y establece los tamaños de los botones, el resto lo hace Fox.

 

If This.lGrande

      m.oCmd.Height  = This.BigButtonHeight

      m.oCmd.Width   = This.BigButtonWidth

      m.oCmd.Picture = m.oCmd.BigPicture

Else

      m.oCmd.Height  = This.SmallButtonHeight

      m.oCmd.Width   = This.SmallButtonWidth

      m.oCmd.Picture = m.oCmd.SmallPicture

EndIf

 

             Como ves no es complejo. El ejemplo lo he dejado reducido a la minima expresión en aras de la claridad. Pero este sistema facilitaría que tengas un solo código (y no dos) uno por cada barra de herramientas con lo que se facilita la generalidad de la aplicación y además tus usuarios estarán más contentos.

 

 

 

 

FoxPress – Mayo de 2001

© 2001 FoxPress. All rights reserved