Clase ctl32_scontainer para Visual FoxPro 9

15/03/2020

 

Autor: Carlos Alloatti y Malcolm Greene

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

El contenido de esta página requiere una versión más reciente de Adobe Flash Player.

Obtener Adobe Flash Player

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. 

 

ctlAutoScrol

     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í.. 

 


 

Vea también

Tema principal Clases

Tema principal la Caja de Herramientas - ToolBox

 

Referencias


Autor: Carlos Alloatti y Malcolm Greene

 

Descarga

ctl32_20080903.zip

Enlace alternativo

 


 

 

 



error: Contenido protegido