10 de noviembre de 2018

Clase ctl32_scontainer para Visual FoxPro 9

ctl32_scontainer
Por Carlos Alloatti y Malcolm Greene

Descarga


Descripción
Esta clase proporciona un control de contenedor desplazable que se puede usar en VFP 9.

¡Esta clase no es un reemplazo para un control Grid! Puede verse como un reemplazo para un control Pageframe, donde, en lugar de tener N páginas, una encima de la otra, tiene N páginas una tras otra y solo puede ver una página a la vez.

Por lo tanto, por las mismas razones que no tendrá un control Pageframe con N páginas como N registros de una tabla, no debería tener un control ctl32_scontainer que muestre N registros de una tabla uno tras otro.
Utiliza la API de Windows para crear verdaderos controles comunes de Windows de barras de desplazamiento.

Esta clase utiliza BINDEVENT con las nuevas características solo disponibles en VFP9. No funcionará en versiones anteriores de VFP. Si está utilizando una versión anterior de VFP, realmente debería actualizar a la versión 9.00 para aprovechar las muchísimas nuevas funciones VFP.



Jerarquía de la clase
ctl32
ctl32_scontainer


Principales características
  • Diseño visual, soltar el control en un formulario, agregarle un control secundario.
  • Soporta el desplazamiento vertical y horizontal de la rueda del mouse, y también el zoom de la rueda del mouse hacia adentro y hacia afuera en el control de la imagen contenida.
  • Soporta hacer clic y arrastrar el desplazamiento.
  • El control activo se desplaza automáticamente, con márgenes verticales y horizontales configurables, cuando un control se enfoca, se desplaza a la vista.
  • Participa de forma transparente en el orden de tabulación normal del formulario.
  • Comportamiento totalmente configurable: smallchange, largechange, wheelchange, mostrar siempre las barras de desplazamiento, mostrar una, ambas o ninguna barra de desplazamiento.
  • Las barras de desplazamiento desaparecen o se inhabilitan cuando no son necesarias.
  • Los cuadros de desplazamiento informan correctamente la posición y el tamaño del área visible dentro del área de control total contenida.
  • Cumplimiento del tema de Windows XP y Vista.
  • Eventos y métodos para implementar tus propios controles de desplazamiento.
  • El control del cliente se puede cargar dinámicamente utilizando los métodos de la clase AddObject() o NewObject().

Usos
  • Panorámica de imágenes grandes.
  • Create Explorer, Taskpane y otras interfaces GUI modernas.
  • En cualquier lugar, un contenedor de propósito general debe desplazarse debido a la forma o el tamaño de la pantalla.

    Imágenes

    Un contenedor desplazable con un control de contenedor en su interior. Puede desplazarse por los controles y obtener desplazamiento automático.


    Un contenedor desplazable con un control de imagen en su interior. Puede acercar/alejar la imagen con CTRL+MouseWheel.


    Inicio rápido
    Si desea un ctl32_scontainer en un formulario, arrastre el control ctl32_scontainer desde la ventana del Administrador de Proyecto y suéltelo en el formulario.

    Cómo agregar controles al contenedor desplazable:
    ¡No agregue múltiples controles dentro del contenedor desplazable!

    El contenedor desplazable solo admite un control de cliente. Añadir un contenedor o un control de imagen..
    Para contenedores anidados simples (o cuando se trabaja con un control de imagen): haga que el contenedor desplazable sea grande, agregue un contenedor con controles o un control de imagen, alinéelo a la izquierda y la parte superior del contenedor desplazable, a continuación, reduzca el tamaño del contenedor desplazable.
    Para contenedores anidados grandes o complejos, cree otro contenedor en un formulario, o como clase, y agregue sus controles a ese contenedor. Luego inserte su contenedor con controles en el contenedor desplazable. Si usó un formulario, copie el contenedor de ese formulario, luego presione la tecla Control y haga clic en el contenedor desplazable y péguelo. Si creó una clase contenedora, presione la tecla control y haga clic en el contenedor desplazable, luego arrastre y suelte la clase contenedora desde la ventana de su proyecto (hay muchas otras formas de hacerlo).

    Piense en el contenedor desplazable como un PageFrame que solo puede tener una página, y en su propio contenedor como una Página. El nivel de jerarquía para sus controles será el mismo que en un escenario de PageFrame - Page.


    El contenedor desplazable usará el primer control que contiene, ignorando cualquier otro control que se le agregue, por eso es crucial que use un control de contenedor, o solo un control de imagen única.


    Usando nuevamente la analogía de PageFrame - Page, no puede agregar controles directamente a un PageFrame en VFP.



    Videos
    Este es un video flash rápido sin sonido, para ver cómo puede usar la clase.

    Proyecto de muestra
    Vea el proyecto de muestra incluido en la carpeta de muestra para ver ejemplos de cómo usar el control y qué se puede hacer.


    BindEvent
    Esta clase hace Bindevents a las siguientes ventanas y mensajes de ventana:

    Thisform.HWnd, WM_KEYUP


    Thisform.HWnd, WM_CAPTURECHANGED


    Thisform.HWnd, WM_LBUTTONUP


    Si se conecta a esos mismos pares de ventana / evento en alguna otra parte de su código, recuerde lo que dice el archivo de Ayuda:


    "Al vincular eventos de mensaje de Windows (Mensaje de Windows), solo puede existir un emparejamiento de mensajes hWnd a Windows"

    Errores
    20060928
    El borde hundido no se mostrará en las versiones de Windows anteriores a XP. Esto se debe a un error en el código de manejo de temas en ctl32_SetTheme (). Esto está arreglado en la versión 20061001.


    Problemas conocidos
    Hay un error en la forma en que VFP dibuja el borde de los marcos hundidos cuando no hay ningún tema activo:
    Este es el borde de un cuadro de texto de VFP.
    Este es el borde de un contenedor de VFP, SpecialEffect establecido en Sunken. Los colores del borde se mezclan.
    A la vista normal del 100% apenas se nota, pero yo sí lo noto.


    Hay un error en VFP con PageFrames dentro de un control de contenedor. Dado que el ctl32_scontainer se basa en la clase de control del contenedor VFP, hereda este error. La solución es no usar un control PageFrame dentro de un control ctl32_scontainer. De todos modos, el punto central de tener un contenedor desplazable es para que no se vea obligado a usar un PageFrame cuando las cosas no encajan en un formulario.

    Las pestañas de página del control PageFrame se filtran cuando están dentro de un Contenedor

    Los componentes ActiveX tendrán los mismos problemas, no deben usarse dentro de un contenedor desplazable.


    Observaciones
    MouseWeel desplaza el contenedor del cliente hacia arriba/abajo. Shift+MouseWheel desplaza el contenedor del cliente hacia la izquierda/derecha.

    Si el contenedor del cliente es un control de imagen, Ctrl+MouseWheel acercará/alejará la imagen.


    Haga doble clic en la imagen para restaurarla al tamaño original.


    Necesito ayuda con el código para mantener la imagen centrada cuando zoomin entra/sale, esa parte aún no está terminada.



    Nota del traductor: La pagina de ayuda de las Propiedades, Eventos y Métodos de esta clase no están completamente traducidas al español.



    Propiedades
    ctlAbout
    Value Type: Character
    Default Value: class name and author(s).
    R/W: Read
    Devuelve el nombre de la clase y los nombres de los programadores que lo escribieron.

     ctlActiveScrollBars
    Value Type: Numeric
    Default Value: 0
    R/W: Read
    Especifica si las barras de desplazamiento son necesarias. No indica si las barras de desplazamiento son visibles. Se puede utilizar para controlar un control de desplazamiento opcional.
    0 None
    1 Horizontal
    2 Vertical
    3 Both

     ctlAutoCenter
    Value Type: Logical
    Default Value: .T.
    R/W: Read/Write
    Especifica si el control secundario debe centrarse en el contenedor desplazable cuando el contenedor desplazable es más grande que el control secundario.

     ctlAutoScroll
    Value Type: Logical
    Default Value: .T.
    R/W: Read/Write
    Especifica si el control se desplazará automáticamente cuando los controles contenidos estén enfocados y estén fuera de la vista.

     ctlBackColor
    Value Type: Numeric
    Default Value: -1
    R/W: Read/Write
    Especifica el color de fondo. Un valor de -1 significa usar el color de fondo predeterminado de los cuadros de texto.

     ctlBackStyle
    Value Type: Numeric
    Default Value: 1
    R/W: Read/Write
    Especifica si el fondo es transparente u opaco.
    0: Transparent
    1: Opaque (Default)

     ctlBorderColor
    Value Type: Numeric
    Default Value: -1
    R/W: Read/Write
    Especifica el color del borde. Un valor de -1 significa usar el color de borde predeterminado de los cuadros de texto.

     ctlBorderStyle
    Value Type: Numeric
    Default Value: 1
    R/W: Read/Write
    Especifica si el control tiene un borde:
    0: No border
    1: Border (Default)

     ctlForceScrollBars
    Value Type: Numeric
    Default Value: 0
    R/W: Read/Write
    Especifica si las barras de desplazamiento deben estar siempre visibles. Las barras de desplazamiento visibles se deshabilitarán cuando no sean necesarias.
    0: None
    1: Horizontal
    2: Vertical
    3: Both

     ctlHEnabled
    Value Type: Logical
    Default Value: .F.
    R/W: Read
    Especifica si la barra de desplazamiento horizontal está habilitada o es obligatoria.

     ctlHHWnd
    Value Type: Numeric
    Default Value: 0
    R/W: Read
    Devuelve un controlador a la ventana de control de la barra de desplazamiento horizontal.

     ctlHLargeChange
    Value Type: Numeric
    Default Value: -1
    R/W: Read/Write
    Especifica el incremento que se desplaza una barra de desplazamiento horizontal al hacer clic en la pista de la barra de desplazamiento.

    El valor predeterminado de -1 significa el ancho de la ventana gráfica. Si se establece en un valor entre 0 y 1, el valor representa un porcentaje del ancho de la ventana gráfica. Cuando se establece en un valor 1 o mayor, el valor está en píxeles o foxels (consulte ScaleMode en la ayuda de VFP).


    Ejemplo: Un valor de 0.25 desplazará una distancia igual al 25% del ancho de la ventana gráfica.

    ctlHMargin
    Value Type: Numeric
    Default Value: 5
    R/W: Read/Write
    Especifica el margen horizontal a usar cuando se desplaza automáticamente al control activo. El valor está en píxeles o foxels (consulte ScaleMode en la ayuda de VFP).

     ctlHSmallChange
    Value Type: Numeric
    Default Value: 20
    R/W: Read/Write
    Especifica el incremento que se desplaza una barra de desplazamiento horizontal al hacer clic en una flecha de desplazamiento. El valor está en píxeles o foxels (consulte ScaleMode en la ayuda de VFP).

     ctlHValue
    Value Type: Numeric
    Default Value: 0
    R/W: Read/Write
    Establece o devuelve el valor de desplazamiento horizontal real del control de cliente.

     ctlHVisible
    Value Type: Logical
    Default Value: .F.
    R/W: Read
    Especifica si la barra de desplazamiento horizontal es visible.

     ctlHWheelChange
    Value Type: Numeric
    Default Value: 40
    R/W: Read/Write
    Especifica el incremento que se desplaza una barra de desplazamiento horizontal cuando utiliza la rueda del mouse. El valor está en píxeles o foxels (consulte ScaleMode en la ayuda de VFP).

     ctlScrollBars
    Value Type: Numeric
    Default Value: 3
    R/W: Read/Write
    Especifica qué barras de desplazamiento deben ser visibles si es necesario.
    0: None
    1: Horizontal
    2: Vertical
    3: Both

     ctlVersion
    Value Type: Character
    Default Value: class version information
    R/W: Read
    Devuelve información de la versión de la clase.

     ctlVEnabled
    Value Type: Logical
    Default Value: .F.
    R/W: Read
    Especifica si la barra de desplazamiento vertical está habilitada o es obligatoria.

     ctlVcxCommon 2006XXXX
    Value Type: Character
    Default Value: ctl32_common.vcx
    R/W: Read/Write
    Especifica la ubicación y el nombre de archivo del archivo ctl32_common.vcx

     ctlVcxStructs 2006XXXX
    Value Type: Character
    Default Value: ctl32_structs.vcx
    R/W: Read/Write
    Especifica la ubicación y el nombre del archivo ctl32_sctrucs.vcx

     ctlVersion
    Value Type: Numeric
    Default Value: Version number.
    R/W: Read
    Devuelve el número de versión de la clase en el formato AAAAMMDD, por ejemplo, 20060925.

     ctlVHWnd
    Value Type: Numeric
    Default Value: 0
    R/W: Read
    Devuelve un controlador a la ventana de control de la barra de desplazamiento horizontal.

     ctlVLargeChange
    Value Type: Numeric
    Default Value: -1
    R/W: Read/Write
    Especifica el incremento que una barra de desplazamiento vertical desplaza cuando hace clic en la pista de la barra de desplazamiento.

    El valor predeterminado de -1 significa la altura de la ventana gráfica. Si se establece en un valor entre 0 y 1, el valor representa un porcentaje de la Altura de la ventana gráfica. Cuando se establece en un valor 1 o mayor, el valor está en píxeles o foxels (consulte ScaleMode en la ayuda de VFP).


    Ejemplo: Un valor de 0.5 desplazará una distancia igual al 50% de la altura de la ventana gráfica.

     ctlVMargin
    Value Type: Numeric
    Default Value: 5
    R/W: Read/Write
    Especifica el margen vertical a usar cuando se desplaza automáticamente al control activo. El valor está en píxeles o foxels (consulte ScaleMode en la ayuda de VFP).

     ctlVSmallChange
    Value Type: Numeric
    Default Value: 20 
    Read/Write.
    Especifica el incremento que una barra de desplazamiento vertical desplaza al hacer clic en una flecha de desplazamiento. El valor está en píxeles o foxels (consulte ScaleMode en la ayuda de VFP).

     ctlVValue
    Value Type: Numeric
    Default Value: 0
    R/W: Read/Write
    Establece o devuelve el valor de desplazamiento vertical real del control de cliente.

     ctlVVisible
    Value Type: Logical
    Default Value: .F.
    R/W: Read
    Especifica si la barra de desplazamiento vertical es visible.

     ctlVWheelChange
    Value Type: Numeric
    Default Value: 40
    R/W: Read/Write
    Especifica el incremento que una barra de desplazamiento vertical desplaza cuando usa la rueda del mouse. El valor está en píxeles o foxels (consulte ScaleMode en la ayuda de VFP).

     ctlZoom 2006XXXX
    Value Type: Numeric
    Default Value: 100
    R/W: Read
    Especifica la cantidad de zoom actual que tiene un contenedor de imagen de cliente, como un porcentaje. 100% es el tamaño normal. El tamaño de la imagen del cliente se puede cambiar con Ctrl+MouseWheel.

    Eventos
    ctlScrolled
    Parameters: nDirection
    Ocurre cuando el control del cliente se desplaza.
    0: Up arrow on vertical scroll bar.
    1: Down arrow on vertical scroll bar.
    2: Vertical scroll bar in area above the scroll box.
    3: Vertical scroll bar in area below the scroll box
    4: Thumb has finished moving on vertical scroll bar.
    5: Thumb is been draged on vertical scroll bar.
    6: Top selected in context menu on vertical scroll bar.
    7: Bottom selected in context menu on vertical scroll bar.
    10: Left arrow on horizontal scroll bar.
    11: Right arrow on horizontal scroll bar.
    12: Horizontal scroll bar in area to the left of the scroll box.
    13: Horizontal scroll bar in area to the right of the scroll box.
    14: Thumb has finished moving on horizontal scroll bar.
    15: Thumb is been draged on horizontal scroll bar.
    16: Left border selected in context menu on horizontal scroll bar.
    17: Right border selected in context menu on horizontal scroll bar.


    Métodos
    ctlDoScroll
    Parameters: nDirection
    0 Scroll Line up SmallChange
    1 Scroll Line down SmallChange
    2 Scroll Page up LargeChange
    3 Scroll Page down LargeChange
    4 No action
    5 No action
    6 Scroll Top
    7 Scroll Bottom

    10 Scroll Line left SmallChange
    11 Scroll Line right SmallChange
    12 Scroll Page left LargeChange
    13 Scroll Page right LargeChange
    14 No action
    15 No action
    16 Scroll Left
    17 Scroll Right
    El parámetro nDirection se configura de esta manera para que coincida con el parámetro nDirection utilizado en el evento Scrolled.


     ctlRestoreSize 20061010
    Si el control del cliente es un control de imagen, este método lo restaurará a su tamaño original, si el tamaño ha sido cambiado usando la combinación de teclas Ctrl-MouseWheel. Este método se activa haciendo doble clic en el control de imagen del cliente.

    Nota
    Todas las propiedades y métodos con un nombre que comienza con "ctl32_" son solo para uso interno de la clase en sí..

    Descarga