18 de febrero de 2018

Clase Barra de desplazamiento con Visual FoxPro

Artículo original: Visual FoxPro ScrollBar Classes
http://www.sweetpotatosoftware.com/blog/index.php/2005/08/27/visual-foxpro-scrollbar-classes/
Autor: Craig Boyd
Traducido por: Ana María Bisbé York


Siento respeto por la creación de barras de desplazamiento (scrollbar).

Temprano en la noche decidí crear una clase scrollbar para utilizarla con Visual FoxPro. Mis necesidades eran: que fuera creada puramente con Visual FoxPro (sin que tuviera ninguna dependencia de controles ActiveX) y que fuera lo suficientemente profesional como para ser utilizada en aplicaciones del mundo real. Han pasado cinco horas ... la clase está completa y ahora siento mis respetos hacia cualquiera que haya sido capaz de crear clases scrollbars. Ha sido uno de los desafíos más difíciles a los que me he enfrentado.

Nueva librería de clases VFPScrollBar

He creado mis clases scrollbar en una librería de clases llamada vfpscrollbar.vcx. Hay que prestar atención a tres clases: scrollbarhorizontal, scrollbarvertical, y sbscrollablecontainer.  Sbscrollablecontainer es un ejemplo de los tipos de clases que se pueden generar utilizando las barras de desplazamiento.

Propiedades y eventos

A continuación, una lista de las propiedades y métodos importantes para scrollbars

Min - Especifica el valor mínimo para la barra (predeterminado es 0)
Max - Especifica el valor máximo para la barra (predeterminado es 100)
Value - Valor actual de la barra basado en la posición de la caja de desplazamiento.
LargeChange - Cantidad que se agrega o deduce del valor de la barra cuando presionamos el área entre la caja de desplazamiento y la flecha de desplazamiento.
SmallChange - Cantidad que se agrega o deduce del valor de la barra cuando se hace clic sobre una flecha de desplazamiento
Change() - Este método de evento se dispara cuando cambia el valor de la barra
Scroll() - Este método de evento se dispara cuando el usuario mueve la caja de desplazamiento.

Al colocar las clases en un contenedor (formulario o lo que sea), puede redimensionar la barra haciéndola más ancha y grande. El resultado en tiempo de diseño puede ser un poco raro (debido a que las flechas de desplazamiento y la caja no se redimensionan o se reponen por sí mismas en tiempo de diseño; pero todo va a tomar forma en tiempo de ejecución. La cuestión aquí es, no necesita perder tiempo en reconfigurar las barras en tiempo de diseño. Colóquelas, redimensiónelas y coloque el contenedor y ejecútelo.

Trabajo futuro y colores

Las barra de desplazamiento actuales son azules (lo que concuerda con los temas de Windows XP); pero mi intención es buscar otros colores de barras para cambiar una propiedad, o verificando el sistema de parámetros del usuario actual, para determinar el color a partir de aquí. He creado meticulosamente estas clases sin utilizar ninguna imagen de forma tal que los colores puedan cambiar fácilmente al vuelo sin recursos de imágenes adicionales.

He revisado además, el código y he arreglado algunas fallas. Lo dejo, tal y como está, estoy exhausto por esto (han sido cinco horas para hacer que esta cosa funcione y que se vea bien). Así que no espere un código clínico con esta clase... quiero decir, no es horrible; pero necesita otro pase para encontrarme a gusto del todo con el.

Son bienvenidas las sugerencias y reporte de errores

Deseo mencionar además que algunos miembros de la Comunidad de Visual FoxPro han comenzado a enviarme sus comentarios, errores corregidos y mejoras de algunos materiales que he publicado en SPS Weblog. Quiero que sepan que esa colaboración, ayuda, comentarios, y/o ideas no sólo son bienvenidas y apreciadas, sino que son exactamente la razón por la cual yo publico aquí estos materiales. No deseo fama ni dinero ... deseo solamente que la  Comunidad de Visual FoxPro mejore el nivel de Visual FoxPro y las otras experiencias de desarrolladores que han trabajado con el, o compañías que puedan considerarlo como una opción viable. Creo que una de las mejores herramientas de desarrollo centrada en datos no merece menos.

He aquí el enlace para descargar el proyecto de ejemplo y el código fuente de vfpscrollbar.vcx así como una imagen de la pantalla de ejemplos que muestra barras utilizadas en una clase contenedor.

Descarga del ejemplo de Scrollbars en VFP y código fuente (46 KB approx.)
http://www.sweetpotatosoftware.com/files/vfpscrollbar.zip

Nota de la traductora: Hasta aquí el escrito original. A continuación detallo las preguntas y observaciones realizadas por Mike y la respuesta de Craig Boyd en la que aclara un grupo de aspectos tenidos, o no, en cuenta.

Mike: Muy bueno como siempre Craig. Se que es un control no terminado, aquí le dejo algunos comentarios:

Mike: 1) La esquina inferior derecha (borde creado por las barras y los bordes del formulario) parecen como si sangraran, es decir, parece ser que son transparentes ¿Es por diseño?

Craig: Si y no. El contenedor desplazable era solo un ejemplo rápido de algo para lo que pudieran ser utilizadas las barras. Sí, Yo pude haber agregado un "gribber" o una forma gris al final derecho del contenedor desplazable; pero existe un aspecto con los colores y los dibujos para temas de Windows XP que el FoxTeam necesita arreglar para Visual FoxPro. Podría ver también a veces un ligero parpadeo en la forma.

Para ilustrar el problema con los controles y temas de Windows XP, desplaza el contenedor hasta que muestres el pageframe que está en el contendor hasta que las fichas queden por debajo de la región no desplazable (donde dice "Visual FoxPro Rocks!". Entonces, si te mueves sobre la mitad inferior de las fichas que son visibles y verás que se dibujan justo sobre el tope de todo y no respeta los bordes del contenedor.

He aquí otro ejemplo para esto ... los gifs animados también van a mostrar a veces este comportamiento.  Puedes posicionarte en el pageframe de tal forma que una ficha quede directamente detrás de las barras y mover el ratón nuevamente sobre la ficha ... o intentar colocando una flecha sobre un encabezado con tema en un grid cualquiera. Básicamente estos controles con temas pintan sobre cualquier cosa cuando se supone que están haciendo su seguimiento de temas. El FoxTeam va a solucionar este problema en el SP 1.

Mike: 2) La rueda del ratón no provoca deplazamiento del contenido.

Craig: Buen punto. Voy a trabajar en esto, a menos que usted tenga algún código que permita a la barra vertical responder a los eventos de la rueda del ratón.

Mike: 3) ¿Pueden desaparecer las barras en caso de no ser necesarias? Por ejemplo, si maximizo el formulario y todo el contenido cabe

Craig: Sí aun no he colocado código para que la barra sea proporcional. Esto, definitivamente será uno de los aspectos a mejorar para la siguiente versión.

Mike: Los desplazamientos parecen muy lentos.

Craig: No he visto eso, se desplazan tan rápido como yo muevo el ratón o hago Clic. ¿Alguien más ha visto esto? Además Mike, puede ejecutar el log de Analizador de trayecto mientras utiliza las barras de desplazamiento y se ven lentas, luego envíemelo o alérteme de dónde es que se atasca. Esto me ayudaría mucho a solucionar el problema. Gracias

Mike: Si pudiera retocar estos aspectos y darle los toques finales a este control, pienso que MS aprendería de el y lo incorporaría (o alguno como este) a Sedna. ¡ Esto es válido para su control separador también ! Continúe con sus grandes contribuciones al mundo VFP .

Craig: Son cuatro puntos muy buenos, y serán muy tenidos en cuenta Mike. Gracias.

2 comentarios :

  1. Excelente..!, Consejos la clase "Sbscrollcontainer" es la que contiene los controles de las barras de desplazamiento. Pues agregar este código en el evento 'Resize' del "Sbscrollcontainer". Cual es el objetivo, si necesidad de acoplar los controles de la barras de desplazamiento. Puedes agrandar el "Sbscrollcontainer", Agrega los controles que desees dentro del "Sbscrollcontainer" sin necesidad de colocar los controles de desplazamiento a tu gusto. Este Código de la parte de abajo se adapta al "Sbscrollcontainer" de forma dinámica con "Sbscrollcontainer". Solo como consejo agrega todo los controles que desees dentro del "Sbscrollcontainer" principal. cuando corras el formulario la propiedad 'WindowState = 2 - Maximized'. Escríbeme si encuentras algún error para ayudarte. suerte....!

    *Modificado por
    *Bryan Channels.

    *Evento Resize
    This.scrollbarvertical1.Top = 0
    This.scrollbarvertical1.Left = This.Width - ;
    ICASE(This.Parent.WindowState = 0, 15, 25)
    This.scrollbarvertical1.Height = This.Height - ;
    ICASE(This.Parent.WindowState = 0, 15, 20)

    This.scrollbarhorizontal1.Width = This.Width - ;
    ICASE(This.Parent.WindowState = 0, 13, 25)
    This.scrollbarhorizontal1.Top = This.Height - ;
    ICASE(This.Parent.WindowState = 0, 15, 22)

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.