Por 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.
¡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
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:
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..
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.
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"
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.
Propiedades
Value Type: CharacterDefault Value: class name and author(s).R/W: ReadDevuelve el nombre de la clase y los nombres de los programadores que lo escribieron.
ctlActiveScrollBars
Value Type: NumericDefault Value: 0R/W: ReadEspecifica 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: LogicalDefault Value: .T.R/W: Read/WriteEspecifica 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: LogicalDefault Value: .T.R/W: Read/WriteEspecifica si el control se desplazará automáticamente cuando los controles contenidos estén enfocados y estén fuera de la vista.
ctlBackColor
Value Type: NumericDefault Value: -1R/W: Read/WriteEspecifica el color de fondo. Un valor de -1 significa usar el color de fondo predeterminado de los cuadros de texto.
ctlBackStyle
Value Type: NumericDefault Value: 1R/W: Read/WriteEspecifica si el fondo es transparente u opaco.0: Transparent
1: Opaque (Default)
ctlBorderColor
Value Type: NumericDefault Value: -1R/W: Read/WriteEspecifica el color del borde. Un valor de -1 significa usar el color de borde predeterminado de los cuadros de texto.
ctlBorderStyle
Value Type: NumericDefault Value: 1R/W: Read/WriteEspecifica si el control tiene un borde:0: No border
1: Border (Default)
ctlForceScrollBars
Value Type: NumericDefault Value: 0R/W: Read/WriteEspecifica 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: LogicalDefault Value: .F.R/W: ReadEspecifica si la barra de desplazamiento horizontal está habilitada o es obligatoria.
ctlHHWnd
Value Type: NumericDefault Value: 0R/W: ReadDevuelve un controlador a la ventana de control de la barra de desplazamiento horizontal.
ctlHLargeChange
Value Type: NumericDefault Value: -1R/W: Read/WriteEspecifica 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: NumericDefault Value: 5R/W: Read/WriteEspecifica 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: NumericDefault Value: 20R/W: Read/WriteEspecifica 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: NumericDefault Value: 0R/W: Read/WriteEstablece o devuelve el valor de desplazamiento horizontal real del control de cliente.
ctlHVisible
Value Type: LogicalDefault Value: .F.R/W: ReadEspecifica si la barra de desplazamiento horizontal es visible.
ctlHWheelChange
Value Type: NumericDefault Value: 40R/W: Read/WriteEspecifica 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: NumericDefault Value: 3R/W: Read/WriteEspecifica qué barras de desplazamiento deben ser visibles si es necesario.0: None
1: Horizontal
2: Vertical
3: Both
ctlVersion
Value Type: CharacterDefault Value: class version informationR/W: ReadDevuelve información de la versión de la clase.
ctlVEnabled
Value Type: LogicalDefault Value: .F.R/W: ReadEspecifica si la barra de desplazamiento vertical está habilitada o es obligatoria.
ctlVcxCommon 2006XXXX
Value Type: CharacterDefault Value: ctl32_common.vcxR/W: Read/WriteEspecifica la ubicación y el nombre de archivo del archivo ctl32_common.vcx
ctlVcxStructs 2006XXXX
Value Type: CharacterDefault Value: ctl32_structs.vcxR/W: Read/WriteEspecifica la ubicación y el nombre del archivo ctl32_sctrucs.vcx
ctlVersion
Value Type: NumericDefault Value: Version number.R/W: ReadDevuelve el número de versión de la clase en el formato AAAAMMDD, por ejemplo, 20060925.
ctlVHWnd
Value Type: NumericDefault Value: 0R/W: ReadDevuelve un controlador a la ventana de control de la barra de desplazamiento horizontal.
ctlVLargeChange
Value Type: NumericDefault Value: -1R/W: Read/WriteEspecifica 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: NumericDefault Value: 5R/W: Read/WriteEspecifica 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: NumericDefault 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: NumericDefault Value: 0R/W: Read/WriteEstablece o devuelve el valor de desplazamiento vertical real del control de cliente.
ctlVVisible
Value Type: LogicalDefault Value: .F.R/W: ReadEspecifica si la barra de desplazamiento vertical es visible.
ctlVWheelChange
Value Type: NumericDefault Value: 40R/W: Read/WriteEspecifica 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).
Value Type: NumericDefault Value: 100R/W: ReadEspecifica 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
Parameters: nDirectionOcurre 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
Parameters: nDirection0 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 RightEl 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