Unidad III
Repite un grupo de instrucciones un número especificado de veces.
Sintaxis
For contador = principio To fin [Step incremento]
[instrucciones]
[Exit For]
[instrucciones]
Next [contador]
La sintaxis de la instrucción For...Next consta de las siguientes partes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorComentarios
El argumento incremento puede ser positivo o negativo. El valor del argumento incremento determina la manera en que se procesa el bucle, como se muestra a continuación:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorUna vez que se inicia el bucle y se han ejecutado todas las instrucciones en el bucle, incremento se suma a contador. En este punto, las instrucciones del bucle se pueden ejecutar de nuevo (si se cumple la misma prueba que causó que el bucle se ejecutara inicialmente) o bien se sale del bucle y la ejecución continúa con la instrucción que sigue a la instrucción Next.
Sugerencia Cambiar el valor de contador mientras está dentro de un bucle hace difícil su lectura y depuración.
Se pueden colocar en el bucle cualquier número de instrucciones Exit For como una manera alternativa de salir del mismo. La instrucción Exit For, que se utiliza a menudo en la evaluación de alguna condición (por ejemplo, If...Then), transfiere el control a la instrucción que sigue inmediatamente a la instrucción Next.
Se pueden anidar bucles For...Next, colocando un bucle For...Next
dentro de otro. Para ello, proporcione a cada bucle un nombre de variable único
como su contador. La siguiente construcción es correcta:
For I = 1 To 10
For J = 1 To 10
For K = 1 To 10
...
Next K
Next J
Next I
Nota Si omite un contador en una instrucción Next, la ejecución continúa como si se hubiera incluido. Se produce un error si se encuentra una instrucción Next antes de su instrucción For correspondiente.
PSet (Método)
Establece un punto de un objeto a un color especificado.
Sintaxis
objeto.PSet [Step] (x, y), [color]
La sintaxis del método PSet consta de las siguientes partes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorComentarios
El tamaño del punto dibujado depende del valor de la propiedad DrawWidth. Cuando DrawWidth es 1, PSet establece un único píxel al color especificado. Cuando DrawWidth es mayor que 1, el punto se centra en las coordenadas especificadas.
La forma en que se dibuja el punto depende del valor de las propiedades DrawMode y DrawStyle.
Cuando se ejecuta PSet, las propiedades CurrentX y CurrentY se establecen al punto especificado por los argumentos.
Para borrar un único píxel con el método PSet, especifique las coordenadas del píxel y utilice el valor de la propiedad BackColor como argumento color.
Este método no se puede usar en un bloque With…End With.
Line (Método)
Dibuja líneas y rectángulos en un objeto.
Sintaxis
objeto.Line [Step] (x1, y1) [Step] - (x2, y2), [color], [B][F]
La sintaxis del método Line consta de las siguientes partes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorComentarios
Para dibujar líneas conectadas, empiece una línea en el punto final de la línea anterior.
El ancho de la línea dibujada depende del valor de la propiedad DrawWidth. El modo en que se dibuja una línea o un cuadro en el fondo depende del valor de las propiedades DrawMode y DrawStyle.
Cuando se ejecuta Line, las propiedades CurrentX y CurrentY se establecen al punto final especificado por los argumentos.
Este método no puede usarse en un bloque With…End With.
Do...Loop (Instrucción)
Repite un bloque de i nstrucciones cuando una condición es True o hasta que una condición se convierta en True.
Sintaxis
Do [{While | Until} condición]
[instrucciones]
[Exit Do]
[instrucciones]
Loop
O bien, puede utilizar esta sintaxis:
Do
[instrucciones]
[Exit Do]
[instrucciones]
Loop [{While | Until} condición]
La sintaxis de la instrucción Do Loop consta de las siguientes partes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorComentarios
Se puede utilizar cualquier número de instrucciones Exit Do ubicadas en cualquier lugar dentro de una estructura de control Do…Loop, para proporcionar una salida alternativa de un Do…Loop. La instrucción Exit Do se utiliza frecuentemente en la evaluación de alguna condición, por ejemplo, If…Then; en este caso, la instrucción Exit Do transfiere el control a la instrucción que sigue inmediatamente a la instrucción Loop.
Cuando se utiliza con instrucciones anidadas Do…Loop, la instrucción Exit Do transfiere control al bucle que está anidado un nivel por encima del bucle donde ocurre.
While...Wend (Instrucción)
Ejecuta una serie de instrucciones mientras una condición dada sea True.
Sintaxis
While condición
[intrucciones]
Wend
La sintaxis de la instrucción While...Wend consta de las siguientes partes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorComentarios
Si condición es True, todas las instrucciones se ejecutan hasta que se encuentra la instrucción Wend. Después, el control vuelve a la instrucción While y se comprueba de nuevo condición. Si condición es aún True, se repite el proceso. Si no es True, la ejecución se reanuda con la instrucción que sigue a la instrucción Wend.
Los bucles While...Wend se pueden anidar a cualquier nivel. Cada Wend coincide con el While más reciente.
Sugerencia La instrucción Do...Loop proporciona una manera más flexible y estructurada de realizar los bucles.
Controls, Colección
Colección cuyos elementos representan a los controles de un componente. La colección Controls tiene una propiedad Count que especifica el número de controles de la colección, y un método Item que devuelve un miembro de la colección.
Sintaxis
objeto.Controls.Count
objeto.Controls(índice)
La sintaxis de la colección Controls consta de las siguientes partes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorNota Si el componente es un módulo de Visual Basic, como Form o UserControl, no tiene que proporcionar la expresión del objeto al escribir código en el módulo. No obstante, si el contenedor es un control ActiveX compilado, como un control ToolBar, debe proporcionar siempre la expresión del objeto.
Comentarios
La colección Controls enumera los controles cargados en un componente y puede ser útil para repetir a lo largo de éstos. Por ejemplo, puede usarla para cambiar la propiedad BackColor de todos los controles Label de un Form.
La colección Controls identifica una variable intrínseca a nivel de formulario denominada Controls. Si omite el marcador de posición opcional objeto, debe incluir la palabra clave Controls. Sin embargo, si incluye objeto, puede omitir la palabra clave Controls. Por ejemplo, las siguientes dos líneas de código tienen el mismo efecto:
MyForm.Controls(6).Top = MyForm.Controls(5).Top + increment
MyForm(6).Top = MyForm(5).Top + increment
Puede pasar Controls(índice) a una función cuyo argumento se especifique como una clase Controls. También puede tener acceso a miembros usando sus nombres. Por ejemplo:
Controls("Command1").Top
Puede usar la palabra clave TypeOf con la instrucción If, o la función TypeName, para determinar el tipo de un control de la colección Controls.
Nota La colección Controls no es un miembro de la clase Collection de Visual Basic. Tiene un conjunto de propiedades y métodos más pequeño que un objeto Collection, y no puede crear instancias de ella.
For Each...Next (Instrucción)
Repite un grupo de instrucciones para cada elemento de una matriz o colección.
Sintaxis
For Each elemento In grupo
[instrucciones]
[Exit For]
[instrucciones]
Next [elemento]
La sintaxis de la instrucción For Each...Next consta de las siguientes partes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorComentarios
La entrada al bloque For Each se produce si hay al menos un elemento en grupo. Una vez que se ha entrado en el bucle, todas las instrucciones en el bucle se ejecutan para el primer elemento en grupo. Después, mientras haya más elementos en grupo, las instrucciones en el bucle continúan ejecutándose para cada elemento. Cuando no hay más elementos en el grupo, se sale del bucle y la ejecución continúa con la instrucción que sigue a la instrucción Next.
Se pueden colocar en el bucle cualquier número de instrucciones Exit For. La instrucción Exit For se utiliza a menudo en la evaluación de alguna condición (por ejemplo, If...Then) y transfiere el control a la instrucción que sigue inmediatamente a la instrucción Next.
Puede anidar bucles For Each...Next, colocando un bucle For Each...Next dentro de otro. Sin embargo, cada elemento del bucle debe ser único.
Nota Si omite elemento en una instrucción Next, la ejecución continúa como si se hubiera incluido. Si se encuentra una instrucción Next antes de su instrucción For correspondiente, se producirá un error.
No se puede utilizar la instrucción For Each...Next con una matriz de tipos definidos por el usuario porque un tipo Variant no puede contener un tipo definido por el usuario.
Open (Instrucción)
Activa operaciones de entrada/salida (E/S) con un archivo.
Sintaxis
Open rutaacceso [For modo] [Access acceso] [bloquear] As [#]númeroarchivo [Len=longitudregistro]
La sintaxis de la instrucción Open consta las siguientes partes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorComentarios
Antes de poder ejecutar una operación de E/S en un archivo, éste debe estar abierto. Open asigna un búfer para operaciones de E/S con el archivo y determina el modo de acceso que se debe utilizar con el búfer.
Si el archivo especificado con rutaacceso no existe, se crea al abrir un archivo en los modos Append, Binary, Output o Random.
Si el archivo ya lo ha abierto otro proceso y no se permite el tipo de acceso especificado, la operación Open fracasa y se produce un error.
La cláusula Len se ignora si modo es Binary.
Importante En los modos Binary, Input y Random se puede abrir un archivo utilizando un número de archivo distinto sin necesidad de cerrarlo antes. En los modos Append y Output debe cerrar el archivo para poder abrirlo con un número de archivo distinto.
DateDiff (Función)
Devuelve un valor de tipo Variant (Long) que especifica el número de intervalos de tiempo entre dos fechas determinadas.
Sintaxis
DateDiff(intervalo, fecha1, fecha2[, primerdíasemana[, primerasemanaaño]])
La sintaxis de la función DateDiff consta de los siguientes argumentos con nombre:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorValores
El argumento intervalo toma los valores siguientes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorEl argumento primerdíasemana toma los siguientes valores:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorComentarios
Puede utilizar la función DateDiff para determinar el número de intervalos especificados que existen entre dos fechas. Por ejemplo, con DateDiff podría calcular el número de días entre dos fechas o el número de semanas entre hoy y el final del año.
Si desea saber el número de días entre fecha1 y fecha2, puede utilizar Día del año ("y") o Día ("d"). Cuando intervalo es Día de la semana ("w"), DateDiff devuelve el número de semanas entre las dos fechas. Si fecha1 es lunes, DateDiff contará el número de lunes hasta fecha2. En la cuenta incluirá fecha2, pero no fecha1. Si intervalo es Semana ("ww"), la función DateDiff devolverá el número de semanas entre las dos fechas. En este caso contará el número de domingos entre fecha1 y fecha2. DateDiff contará fecha2 si es domingo, pero no fecha1, aunque sea domingo.
Si fecha1 se refiere a un momento posterior en el tiempo a fecha2, la función DateDiff devolverá un número negativo.
El argumento primerdíasemana afecta a los cálculos que utilizan "w" y "ww" como símbolos de intervalo.
Si fecha1 o fecha2 es un literal de fecha, el año, si se especifica, pasará a ser una parte permanente de la fecha. Sin embargo, si fecha1 o fecha2 está comprendida entre comillas dobles ("") y se omite el año, se insertará el año en curso en el código cada vez que se evalúe la expresión fecha1 o fecha2. Así es posible escribir código que se pueda usar en años distintos.
Cuando compara el 31 de diciembre con el 1 de enero del año siguiente, DateDiff para un año ("yyyy") devolverá 1 aunque sólo haya pasado un día.
Filter (Propiedad, control CommonDialog)
Devuelve o establece los filtros presentados en el cuadro de lista Tipo de un cuadro de diálogo.
Sintaxis
objeto.Filter [= descripción1 |filtro1 |descripción2 |filtro2...]
La sintaxis de la propiedad Filter consta de las siguientes partes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorComentarios
El filtro especifica el tipo de archivos que se presentan en el cuadro de lista de archivos del cuadro de diálogo. Por ejemplo, si selecciona el filtro *.txt se presentarán todos los archivos de texto.
Utilice esta propiedad para proporcionar al usuario una lista de filtros que se pueden seleccionar cuando se presente el cuadro de diálogo.
Utilice la barra vertical ( | ) (ASCII 124) para separar los valores descripción y filtro. No incluya espacios en blanco delante o a continuación de la barra vertical, ya que dichos espacios aparecerán en los valores descripción y filtro.
El siguiente código muestra un ejemplo de filtro que permite que el usuario seleccione archivos de texto o archivos gráficos que incluyan mapas de bits e iconos:
Texto (*.txt)|*.txt|Imágenes (*.bmp;*.ico)|*.bmp;*.ico
Cuando especifique varios filtros en un cuadro de diálogo, utilice la propiedad FilterIndex para determinar qué filtro se presenta como predeterminado.
Tipo de datos
String
Unidad IV. Mejoras a la interfaz
Editor de menús (Cuadro de diálogo)
Le permite crear menús personalizados para la aplicación y definir sus propiedades.
Opciones del cuadro de diálogo
Título
Le permite escribir el nombre del comando o del menú que desea que aparezca en la barra de menús o en un menú.
Si desea crear una barra separadora en el menú, escriba un único guión (-) en el cuadro Título.
Para dar al usuario acceso a través del teclado a un elemento del menú, escriba el signo & delante de una letra. En tiempo de ejecución, esta letra aparecerá subrayada (el signo & no será visible) y el usuario tendrá acceso al menú o al comando si presiona las teclas Alt y la correspondiente a la letra subrayada. Si necesita que aparezca en el menú el signo &, deberá escribir dos signos & consecutivos.
Nombre
Le permite escribir un nombre de control para el elemento del menú. El nombre de control es un identificador que sólo se utiliza para tener acceso al elemento del menú en el código, no aparece en ningún menú.
Índice
Le permite asignar un valor numérico que determina la posición del control en una matriz de controles. Esta posición no tiene ninguna relación con la ubicación del control en la pantalla.
Método abreviado
Le permite seleccionar una tecla de método abreviado para cada comando.
Id. de contexto de Ayuda
Le permite asignar un valor numérico único para el Id. de contexto. Este valor se utiliza para encontrar el tema de Ayuda apropiado en el archivo de Ayuda identificado mediante la propiedad HelpFile.
NegotiatePosition
Le permite seleccionar la propiedad NegotiatePosition del menú. Esta propiedad determina si el menú aparece o no en un formulario contenedor y cómo aparece.
Checked
Le permite hacer que aparezca inicialmente una marca de verificación a la izquierda de un elemento del menú. Se utiliza normalmente para indicar si una opción de alternar está activada o no.
Enabled
Le permite seleccionar si el elemento del menú debe responder a eventos. Desactive esta opción si desea que el elemento del menú no esté disponible y aparezca atenuado.
Visible
Le permite hacer que un elemento aparezca en el menú.
WindowList
Determina si el control del menú contiene una lista de formularios secundarios MDI abiertos en una aplicación MDI.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Flecha a la derecha
Pasa el menú seleccionado a un nivel inferior cada vez que hace clic en el botón. Puede crear hasta cuatro niveles de submenús.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Flecha a la izquierda
Pasa el menú seleccionado a un nivel superior cada vez que hace clic en el botón. Puede crear hasta cuatro niveles de submenús.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Flecha arriba
Cada vez que se hace clic en este botón, el elemento seleccionado del menú se mueve hacia arriba una posición dentro del mismo nivel de menú.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Flecha abajo
Cada vez que se hace clic en este botón, el elemento seleccionado del menú se mueve hacia abajo una posición dentro del mismo nivel de menú.
Lista Menús
Es un cuadro de lista que muestra en orden jerárquico todos los elementos del menú. Los elementos de los submenús aparecen indentados para indicar su ubicación o su nivel en la jerarquía.
Siguiente
Selecciona la línea siguiente.
Insertar
Inserta una línea en el cuadro de lista, inmediatamente encima de la línea actualmente seleccionada.
Eliminar
Elimina Borra la línea actualmente seleccionada.
Aceptar
Cierra el Editor de menús y aplica todos los cambios efectuados en el último formulario seleccionado. El menú está disponible en tiempo de diseño, pero si selecciona un menú en la fase de diseño, se abre la ventana Código para el evento Clic de ese menú en lugar de ejecutarse el código del evento.
Cancelar
Cierra el Editor de menús y cancela todos los cambios.
ImageList (Control)
Un control ImageList contiene una colección de objetos ListImage, a cada uno de los cuales se puede hacer referencia mediante su índice o su clave. El control ImageList no está concebido para usarlo en solitario, sino como punto de almacenamiento central para proporcionar cómodamente imágenes a otros controles.
Sintaxis
ImageList
Comentarios
El control ImageList funciona como un almacén de imágenes, y como tal, necesita un control secundario para mostrar las imágenes almacenadas. El segundo control puede ser cualquier control que pueda mostrar un objeto Picture, o puede ser uno de los controles comunes de Windows diseñados especialmente para ser enlazados con el control ImageList. Éstos controles son los controles ListView, ToolBar, TabStrip, Header, ImageCombo y TreeView. Para usar un control ImageList con uno de estos controles, debe enlazar un control ImageList particular con el segundo control mediante una propiedad adecuada. Para el control ListView debe establecer las propiedades Icons y SmallIcons de los controles ImageList. Para los controles TreeView, TabStrip, ImageCombo y Toolbar la propiedad ImageList debe ser un control ImageList.
Durante el diseño del programa puede agregar imágenes mediante la ficha Imágenes del cuadro de diálogo Propiedades del control ImageList. En tiempo de ejecución puede agregar imágenes mediante el método Add para la colección ListImages.
Para los controles comunes de Windows, puede especificar un ImageList durante el diseño del programa mediante el cuadro de diálogo Propiedades personalizadas. En tiempo de ejecución puede especificar también un control ImageList utilizando la propiedad ImageList, como en el ejemplo siguiente:
TreeView1.ImageList = ImageList1 ' Especifica ImageList
Importante Al usar el control ImageList con controles comunes de Windows, es necesario insertar todas las imágenes que necesitará en el orden adecuado, en el control ImageList antes de enlazarlo al control secundario. Una vez que ImageList está enlazado a un control secundario, no puede eliminar imágenes, y no puede insertar imágenes en la mitad de la colección ListImages. A pesar de todo, puede agregar imágenes al final de la colección.
Una vez asociado un ImageList con un control común de Windows, puede usar el valor de la propiedad Index o Key para hacer referencia a un objeto ListImage en un procedimiento. El ejemplo siguiente establece la propiedad Image del tercer objeto Node de un control TreeView al primer objeto ListImage de un control ImageList:
' Usa el valor de la propiedad Index de ImageList1.
TreeView1.Nodes(3).Image = 1
' O usa el valor de la propiedad Key.
TreeView1.Nodes(3).Image = "imagen 1" ' Suponiendo que Key es "imagen 1".
Para usar el control ImageList con otros controles (que no se pueden enlazar al control ImageList), asigne la propiedad Picture del segundo control al objeto Picture de cualquier imagen en el control ImageList. Por ejemplo, el código siguiente asigna el objeto Picture del primer objeto ListImage de una colección ListImages a la propiedad Picture de un panel StatusBar creado recientemente:
Dim pnlX As Panel
Set pnlX = StatusBar1.Panels.Add() ' Agrega un nuevo objeto Panel.
Set pnlX.Picture = ImageList1.ListImages(1).Picture ' Establece Picture.
Nota Debe usar la instrucción Set al asignar una imagen al objeto Picture.
Puede insertar una imagen de cualquier tamaño en el control ImageList. A pesar de todo, el tamaño de la imagen mostrada por el segundo control depende de un factor: si el control secundario es o no un control común de Windows enlazado al control ImageList.
Cuando el control ImageList está enlazado a otro control común de Windows, es posible agregar imágenes de diferentes tamaños al control, a pesar de todo el tamaño de la imagen mostrada en el control común de Windows asociado se ajustará al tamaño de la primera imagen agregada a ImageList. Por ejemplo, si agrega una imagen de 16 por 16 píxeles a un control ImageList, se enlaza ImageList a un control TreeView (para mostrarse en objetos Node), todas las imágenes almacenadas en un control ImageList se mostrarán con 16 por 16 píxeles, incluso si son mucho mayores o mucho menores.
Por otra parte, si muestra imágenes usando el objeto Picture, cualquier imagen almacenada en el control ImageList se mostrará con su tamaño original, sin importar su tamaño.
Nota para la distribución El control ImageList forma parte de un grupo de controles ActiveX que se encuentran en el archivo MSCOMCTL.OCX. Para usar el control ImageList en su aplicación debe agregar el archivo MSCOMCTL.OCX al proyecto. Cuando distribuya su aplicación, instale el archivo MSCOMCTL.OCX en el directorio System o System32 de Microsoft Windows del usuario. Para ver más información acerca de cómo agregar un control ActiveX a un proyecto, vea el Manual del programador.
Toolbar (Control)
Un control Toolbar contiene una colección de objetos Button utilizados para crear una barra de herramientas asociada a una aplicación.
Sintaxis
Toolbar
Comentarios
Normalmente, una barra de herramientas contiene botones que corresponden a elementos de menú de una aplicación, proporcionando una interfaz gráfica al usuario que le permite tener acceso a las funciones y comandos empleados con más frecuencia en esa aplicación.
El control Toolbar le permite crear barras de herramientas agregando objetos Button a una colección Buttons; cada objeto Button puede tener texto opcional o una imagen, proporcionados por un control ImageList asociado. Puede mostrar una imagen en un botón con la propiedad Image o mostrar texto con la propiedad Caption, o ambos, para cada objeto Button. En tiempo de diseño puede agregar objetos Button al control utilizando la Página de propiedades del control Toolbar. En tiempo de ejecución, puede agregar o quitar botones de la colección Buttons mediante los métodos Add y Remove.
Para programar el control Toolbar, agregue código al evento ButtonClick para que responda al botón seleccionado. También puede determinar el comportamiento y la apariencia de cada objeto Button mediante la propiedad Style. Por ejemplo, si a cuatro botones se les asigna el estilo ButtonGroup, sólo se podrá presionar uno de ellos y al menos uno estará siempre presionado.
Puede crear espacio para otros controles en la barra de herramientas si asigna a un objeto Button el estilo Placeholder y después coloca un control sobre el marcador de posición. Por ejemplo, para colocar en una barra de herramientas un cuadro combinado desplegable en tiempo de diseño, agregue un objeto Button con estilo PlaceHolder y asígnele el ancho de un control ComboBox. Después, coloque un ComboBox en el marcador de posición.
Al hacer doble clic en una barra de herramientas en tiempo de ejecución se invoca el cuadro de diálogo Personalizar barra de herramientas, que permite al usuario ocultar, mostrar o reorganizar los botones de la barra de herramientas. Para activar o desactivar el cuadro de diálogo, use la propiedad AllowCustomize. Puede invocar también el cuadro de diálogo Personalizar barra de herramientas mediante el método Customize. Si desea guardar y restaurar el estado de una barra de herramientas, o permitir al usuario hacerlo, puede elegir entre dos métodos: SaveToolbar y RestoreToolbar. El evento Change, que se genera cuando se altera una barra de herramientas, se usa normalmente para invocar el método SaveToolbar.
Nota El cuadro de diálogo Personalizar también incluye un botón Ayuda. Utilice las propiedades HelpFile y HelpContextID para determinar qué archivo de Ayuda (si lo hay) se mostró la última vez que el usuario hizo clic en el botón Ayuda.
La facilidad de uso se mejora considerablemente programando descripciones ToolTipText de cada objeto Button. Para mostrar información sobre herramientas, la propiedad ShowTips debe establecerse a True. Cuando el usuario invoca el cuadro de diálogo Personalizar barra de herramientas, al hacer clic en un botón se muestra una descripción del botón en el cuadro de diálogo; esta descripción puede programarse mediante la propiedad Description.
Nota para la distribución El control Toolbar forma parte de un grupo de controles ActiveX que se encuentran en el archivo MSCOMCTL.OCX. Para usar el control Toolbar en su aplicación debe agregar el archivo MSCOMCTL.OCX al proyecto. Cuando distribuya su aplicación, instale el archivo MSCOMCTL.OCX en la carpeta System o System32 (en plataformas con Windows NT) de Microsoft Windows del usuario. Para obtener más información acerca de cómo agregar un control ActiveX a un proyecto, vea "Cargar controles ActiveX" en la Guía de herramientas componentes.
StatusBar (Control)
El control StatusBar proporciona una ventana, normalmente ubicada en la parte inferior de un formulario primario, a través de la cual una aplicación puede mostrar varios tipos de datos de estado. El control StatusBar puede dividirse hasta en un máximo de 16 objetos Panel contenidos en una colección Panels.
Sintaxis
StatusBar
Comentarios
Un control StatusBar está formado por objetos Panel, cada uno de los cuales puede contener texto o una imagen. Entre las propiedades para controlar la apariencia de cada panel se encuentran Width, Alignment (alineamiento del texto y las imágenes) y Bevel. Además, puede usar uno de los siete valores de la propiedad Style para mostrar automáticamente datos habituales, como la fecha, la hora y los estados del teclado.
En tiempo de diseño puede crear paneles, personalizar su apariencia y establecer sus valores en la ficha Panel de la Hoja de propiedades del control StatusBar. En tiempo de ejecución, los objetos Panel pueden volverse a configurar para reflejar distintas funciones, dependiendo del estado de la aplicación. Si desea más información acerca de las propiedades, eventos y métodos de los objetos Panel, vea los temas Panel (Objeto) y Panels (Colección).
Normalmente, el control StatusBar muestra información sobre un objeto visible en el formulario, sus componentes o información de contexto relacionada con su funcionamiento. El control StatusBar, junto con otros controles como Toolbar, proporciona las herramientas necesarias para crear una interfaz sencilla y rica en información.
Nota para la distribución El control StatusBar forma parte de los controles personalizados que se encuentran en el archivo MSCOMCTL.OCX. Para usar el control StatusBar en su aplicación, debe agregar el archivo MSCOMCTL.OCX a su proyecto. Al distribuir su aplicación, instale el archivo MSCOMCTL.OCX en el directorio SYSTEM de Microsoft Windows del usuario. Para obtener más información acerca de cómo agregar un control personalizado a un proyecto, vea el Manual del programador.
ProgressBar (Control)
El control ProgressBar muestra la evolución de una operación prolongada llenando un rectángulo en bloques de izquierda a derecha.
Sintaxis
ProgressBar
Comentarios
Un control ProgressBar tiene un intervalo y una posición actual. El intervalo representa la duración completa de la operación. La posición actual representa el progreso de la aplicación para completar la operación. Las propiedades Max y Min establecen los límites del intervalo. La propiedad Value especifica la posición actual dentro del intervalo. Debido al uso de segmentos completos para llenar el control, la cantidad llenada sólo brinda una aproximación al valor actual de la propiedad Value. Basándose en el tamaño del control, la propiedad Value determina el momento de llenar el segmento siguiente.
Las propiedades Height y Width del control ProgressBar determinan el número y el tamaño de los segmentos que lo llenan. Cuantos más segmentos se usen, mayor será la precisión con que el control reflejará la evolución de la operación. Para incrementar el número de segmentos mostrados, reduzca el valor de la propiedad Height o incremente el de Width. El valor de la propiedad BorderStyle también afecta al número y al tamaño de los segmentos. Para ajustarse al borde, el tamaño de los segmentos se reduce.
Puede usar la propiedad Align con el control ProgressBar para situarlo automáticamente al principio o al final del formulario.
Sugerencia Para ajustar el tamaño del segmento para que el incremento del progreso se acerque a los valores del progreso real, haga que el control ProgressBar sea al menos 12 veces más ancho que alto.
En el ejemplo siguiente se muestra la forma de usar un control ProgressBar, llamado ProgressBar1, para mostrar la evolución de una operación prolongada en una matriz grande. Coloque un control CommandButton y un control ProgressBar en un formulario. La propiedad Align del código de ejemplo coloca el control ProgressBar en el borde inferior del formulario. El control ProgressBar no muestra ningún texto.
Private Sub Command1_Click()
Dim Counter As Integer
Dim Workarea(250) As String
ProgressBar1.Min = LBound(Workarea)
ProgressBar1.Max = UBound(Workarea)
ProgressBar1.Visible = True
'Establece Min como valor de Value.
ProgressBar1.Value = ProgressBar1.Min
'Bucle para recorrer la matriz.
For Counter = LBound(Workarea) To UBound(Workarea)
'Establece los valores iniciales de cada elemento de la matriz.
Workarea(Counter) = "Valor inicial" & Counter
ProgressBar1.Value = Counter
Next Counter
ProgressBar1.Visible = False
ProgressBar1.Value = ProgressBar1.Min
End Sub
Private Sub Form_Load()
ProgressBar1.Align = vbAlignBottom
ProgressBar1.Visible = False
Command1.Caption = "Inicializar matriz"
End Sub
Nota para la distribución El control ProgressBar forma parte de un grupo de controles ActiveX que podrá encontrar en el archivo MSCOMCTL.OCX. Para usar el control ProgressBar en una aplicación, debe agregar el archivo MSCOMCTL.OCX al proyecto. Al distribuir la aplicación, instale el archivo MSCOMCTL.OCX en el directorio System o System32 de Microsoft Windows. Si desea más información acerca de la forma de agregar un control ActiveX a un proyecto, vea el Manual del programador.
ImageCombo (Control)
El control ImageCombo es una versión del cuadro combinado estándar de Windows habilitada para aceptar imágenes. Es posible asociar una imagen a cada elemento de la parte de lista del control.
Además de admitir imágenes, el control ImageCombo actúa como una colección y una lista de objetos. Cada elemento de la parte de lista del control es un objeto ComboItem distinto de los demás y, juntos, todos los elementos de la lista constituyen la colección ComboItems. Esto simplifica la tarea de especificar propiedades elemento por elemento, por ejemplo, el texto de una etiqueta, un texto de información, el valor de una clave y el nivel de sangría.
Sintaxis
ImageCombo
Comentarios
Con un control ImageCombo puede mostrar una lista de elementos que incluyen imágenes. Es posible hacer que cada elemento tenga su propia imagen o bien emplear la misma imagen para múltiples elementos de una lista.
El control ImageCombo contiene una colección de objetos ComboItem. Un objeto ComboItem define las distintas características de los elementos mostrados en la parte de lista del control.
Además de mostrar imágenes en los elementos de la lista, el control ImageCombo utiliza colecciones y objetos para administrar la parte de lista del control. Gracias a esto se simplifica el manejo de las entradas de la lista, utilizando los conocidos conceptos de colección y objeto, como los métodos Add, Remove y Clear, y también las construcciones For Each, With... y End With.
Nota El control ImageCombo forma parte de un grupo de controles ActiveX incluidos dentro del archivo COMCT232.ocx. Antes de poder usar el control ImageCombo en su aplicación debe agregar el archivo COMCT232.ocx al proyecto. Al distribuir su aplicación, instale el archivo COMCT232.ocx en el directorio System o System32 de Microsoft Windows. Para obtener más información acerca de cómo agregar un control ActiveX a un proyecto, vea "Agregar controles a un proyecto" en el Manual del programador.
TreeView (Control)
Un control TreeView muestra una lista jerárquica de objetos Node, cada uno de los cuales consta de una etiqueta y un mapa de bits opcional. Los controles TreeView se utilizan habitualmente para mostrar los encabezados de un documento, las entradas de un índice, los archivos y directorios de un disco o cualquier otro tipo de información que pueda ser útil ver en una estructura jerárquica.
Sintaxis
Treeview
Comentarios
Una vez creado un control TreeView, puede agregar, quitar, organizar y manipular de diversas formas los objetos Node si establece propiedades e invoca métodos. Puede expandir y contraer mediante programa los objetos Node para mostrar u ocultar todos los nodos secundarios. Existen tres eventos, Collapse, Expand y NodeClick, que también ofrecen funcionalidad mediante programa.
Puede desplazarse por un árbol en el código si recupera una referencia a los objetos Node mediante las propiedades Root, Parent, Child, FirstSibling, Next, Previous y LastSibling. Los usuarios también pueden desplazarse por un árbol mediante el teclado. Las teclas FLECHA ARRIBA y FLECHA ABAJO recorren hacia abajo uno a uno todos los objetos Node expandidos. Los objetos Node se seleccionan de izquierda a derecha y de arriba abajo. En la parte inferior del árbol, la selección vuelve a la parte superior y la ventana se desplaza si es necesario. Las teclas FLECHA DERECHA y FLECHA IZQUIERDA también permiten desplazarse por los objetos Node expandidos, pero si presiona la tecla FLECHA DERECHA cuando hay seleccionado un nodo no expandido, éste se expandirá y una segunda pulsación desplazará la selección al siguiente objeto Node. Por el contrario, al presionar FLECHA IZQUIERDA cuando hay seleccionado un objeto Node expandido, éste se contrae Si el usuario presiona una tecla ANSI, el enfoque pasará al objeto Node más próximo que comience con esa letra. Si se presiona repetidamente la misma tecla, la selección recorrerá uno a uno todos los nodos expandidos que comiencen por esa letra.
Existen diversos estilos que modifican la apariencia del control. Los objetos Node pueden aparecer con una de ocho combinaciones posibles de texto, mapas de bits, líneas y signos más y menos.
El control TreeView utiliza el control ImageList, especificado por la propiedad ImageList, para almacenar los mapas de bits e iconos mostrados en los objetos Node. Un control TreeView sólo puede usar un control ImageList cada vez. Esto significa que todos los elementos del control TreeView tendrán una imagen del mismo tamaño junto a ellos al establecer la propiedad Style del control TreeView a un estilo que muestre imágenes.
Nota para la distribución El control TreeView forma parte de un grupo de controles ActiveX que se encuentran en el archivo MSCOMCTL.OCX. Para usar el control TreeView en su aplicación, debe agregar el archivo MSCOMCTL.OCX al proyecto. Cuando distribuya su aplicación, instale el archivo MSCOMCTL.OCX en el directorio System o System32 de Microsoft Windows del usuario.
Usar el control TreeView
El control TreeView está diseñado para mostrar datos de naturaleza jerárquica, como árboles organizativos, las entradas de un índice, o los archivos y directorios de un disco.
Figura 2.40 Un control TreeView típico
Aplicaciones posibles
Establecer las propiedades del objeto Node
Un "árbol" se compone de ramas sucesivas de "nodos" y cada nodo consta normalmente de una imagen (establecida con la propiedad Image) y una etiqueta (establecida con la propiedad Text). Un control ImageList asociado al control TreeView proporciona las imágenes para los nodos. Si desea obtener más información acerca del uso del control ImageList con otros controles, vea "Usar el control ImageList".
Un nodo puede expandirse o contraerse dependiendo de si tiene o no nodos secundarios (nodos que parten de él). En el nivel superior están los nodos "raíz", y cada nodo raíz puede tener cualquier número de nodos secundarios. El número total de nodos no está limitado (salvo por las restricciones del sistema). En la figura 2.41 se muestra un árbol con dos nodos raíz. "Raíz 1" tiene tres nodos secundarios y "Secundario 3" tiene a su vez un nodo secundario. "Raíz 2" tiene nodos secundarios, como indica el signo "+", pero está sin expandir.
Figura 2.41 Nodos raíz y nodos secundarios
Cada nodo de un árbol es en realidad un objeto Node programable que pertenece a la colección Nodes. Como en otras colecciones, cada miembro de la colección tiene un valor único en las propiedades Index y Key, lo que permite el acceso a las propiedades del nodo. Por ejemplo, el código siguiente utiliza el índice de un nodo determinado ("7") para establecer sus propiedades Image y Text:
tvwMiÁrbol.Nodes(7).Image = "cerrado"
tvwMiÁrbol.Nodes(7).Text = "IEEE"
Sin embargo, si se ha asignado al nodo una clave única, por ejemplo "7 ID", el mismo código se podría escribir de esta forma:
tvwMiÁrbol.Nodes("7 ID").Image = "cerrado"
tvwMiÁrbol.Nodes("7 ID").Text = "IEEE"
Relaciones entre nodos y referencias a nodos relativos
Cada nodo puede ser secundario o primario, según su relación con otros nodos. El objeto Node cuenta con varias propiedades que devuelven distintos datos sobre los nodos secundarios o primarios. Por ejemplo, el código siguiente utiliza la propiedad Children para devolver el número de nodos secundarios que tiene un nodo (si tiene alguno):
MsgBox tvwMiÁrbol.Nodes(10).Children
Sin embargo, algunas de las propiedades no devuelven información como lo hace Children, sino que devuelven una referencia a otro objeto Node. Por ejemplo, la propiedad Parent devuelve una referencia al nodo primario de un nodo específico (siempre y cuando no sea el nodo raíz). Con esta referencia puede manipular el nodo primario si invoca los métodos o establece las propiedades aplicables a los objetos Node. Por ejemplo, el código siguiente obtiene los valores de las propiedades Text e Index de un nodo primario:
MsgBox tvwMiÁrbol.Nodes(10).Parent.Text
MsgBox tvwMiÁrbol.Nodes(10).Parent.Index
Sugerencia Puede usar la instrucción Set con una variable de objeto de tipo Node para manipular referencias a otros objetos Node. Por ejemplo, el código siguiente establece una variable de objeto Node con la referencia que devuelve la propiedad Parent. Después se utiliza la variable de objeto para devolver las propiedades del nodo relativo:
Dim tempNode As Node ' Declara una variable de objeto.
' Establece la variable con la referencia devuelta.
Set tempNode = tvwMiÁrbol.Nodes(10).Parent
MsgBox tempNode.Text ' Devuelve la propiedad Text del nodo primario.
MsgBox tempNode.Index ' Devuelve la propiedad Index del nodo primario.
Agregar objetos Node a la colección Nodes
Para agregar un objeto Node al árbol, utilice el método Add (colección Nodes). Este método tiene dos argumentos, relative y relationship, que determinan dónde se agregará el nodo. El primer argumento, relative, indica el nombre de un nodo, mientras que el segundo, relationship, especifica la relación entre el nuevo nodo y el indicado en relative.
Por ejemplo, el código siguiente agrega un nodo denominado "nodo 11" como un nodo secundario de otro llamado "nodo 7". La constante intrínseca tvwChild especifica que el nuevo nodo es un nodo secundario del indicado en el primer argumento. El tercer argumento asigna la propiedad Key al nuevo nodo.
tvwMiÁrbol.Nodes.Add "nodo 7", tvwChild, "nodo 11"
Otras relaciones posibles son las siguientes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior
Por ejemplo, suponga que hay tres nodos y que desea colocar un cuarto nodo entre el segundo y el tercero. El código sería el siguiente:
' Suponiendo que el valor de Key para el segundo
' nodo es "nodo 2".
tvwMiÁrbol.Nodes.Add "nodo 2", tvwNext
Otros argumentos del método Add son key, text e image. Con estos argumentos puede asignar las propiedades Key, Text e Image al crear el nuevo objeto Node.
Para obtener más información Si desea obtener más información acerca del método Add de la colección Nodes, vea "Método Add", escribiendo "Método Add" en la búsqueda de Índice y haciendo clic en "Método Add (colección Nodes)".
Una segunda forma de agregar nodos es declarar una variable de objeto de tipo Node y usar luego la instrucción Set con el método Add. La instrucción Set establece la variable de objeto con el nuevo nodo. Después, puede usar la variable de objeto para establecer las propiedades del nodo, como se muestra a continuación:
Dim nodX As Node
Set nodX = tvwMiÁrbol.Nodes.Add("nodo 10", tvwChild)
nodX.Key = "nodo 11"
nodX.Text = "IEEE"
nodX.Image = "cerrado"
Sugerencia Usar la instrucción Set con el método Add facilita la lectura y depuración del código. Sin embargo, usar el método Add y sus argumentos para agregar nodos crea un código más rápido.
ListView (Control)
El control ListView muestra elementos en una de cuatro vistas diferentes. Puede organizar los elementos en columnas con o sin encabezados, así como mostrar iconos y texto adjuntos.
Sintaxis
ListView
Comentarios
Con un control ListView puede organizar entradas de listas, llamadas objetos ListItem, en una de las siguientes vistas:
La propiedad View determina qué vista utiliza el control para mostrar los elementos de la lista. También puede controlar si las etiquetas asociadas a los elementos de la lista se ajustan a más de una línea mediante la propiedad LabelWrap. Además, puede organizar cómo se ordenan los elementos de la lista y cómo se muestran los elementos seleccionados.
El control ListView contiene los objetos ListItem y ColumnHeader. Un objeto ListItem define las distintas características de los elementos del control ListView, como:
Puede mostrar los encabezados de columna en el control ListView mediante la propiedad HideColumnHeaders. Puede agregar los encabezados tanto en tiempo de diseño como en tiempo de ejecución. En tiempo de diseño, puede usar la ficha Encabezados de columna del cuadro de diálogo Página de propiedades del control ListView. En tiempo de ejecución, utilice el método Add para agregar un objeto ColumnHeader a la colección ColumnHeaders.
Nota para la distribución El control ListView forma parte de un grupo de controles ActiveX que se encuentran en el archivo MSCOMCTL.OCX. Para usar el control ListView en la aplicación, deberá agregar el archivo MSCOMCTL.OCX al proyecto. Cuando distribuya la aplicación, instale el archivo MSCOMCTL.OCX en el directorio System o System32 de Microsoft Windows del usuario. Para obtener más información acerca de cómo agregar un control ActiveX a un proyecto de Visual Basic, vea el Manual del programador de Visual Basic.
Usar el control ListView
El control ListView muestra datos en forma de objetos ListItem. Cada objeto ListItem puede tener un icono opcional asociado con la etiqueta del objeto. Este control es idóneo para representar subconjuntos de datos (como los miembros de una base de datos) u objetos discretos (como plantillas de documentos).
Aplicaciones posibles
Cuatro vistas disponibles
El control ListView puede mostrar los datos en cuatro vistas diferentes (representadas en las siguientes figuras). La forma de programar el control dependerá de las vistas que se permita ver (o seleccionar) al usuario.
Cada una de estas vistas tiene una ventaja en particular con respecto a las demás. Algunas de ellas se indican en la tabla siguiente:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorEl control ListView en vista de Iconos
El control ListView en vista de Iconos pequeños
El control ListView en vista de Lista
El control ListView en vista de Informe
Cambio de la vista con la propiedad View
Para cambiar la vista, puede usar la propiedad View. En el código siguiente se establece la propiedad View a vista de Informe (3), mediante la constante intrínseca lvwReport:
' El nombre del control es "ListView1"
ListView1.View = lvwReport
Con la propiedad View puede permitir al usuario cambiar dinámicamente la vista. En el evento Load del formulario, el control ComboBox se llena con las opciones de View:
Private Sub Form_Load()
' Llena el control ComboBox. Su nombre
' es "cmbChooseView".
With cmbChooseView
. AddItem "Iconos" '0
. AddItem " Iconos pequeños " ' 1
. AddItem "Lista" ' 2
. AddItem "Informe" ' 3
End With
End Sub
En el evento Click del control ComboBox puede restablecerse la propiedad View del control, de esta forma:
Private Sub cmbChooseView_Click()
' El control ListView se llama "lvwDB".
lvwDB.View = cmbChooseView.ListIndex
End Sub
Dos controles ImageList para Iconos e Iconos pequeños
Un objeto ListItem consta de una etiqueta (la propiedad Text) y una imagen opcional suministrada por un control ImageList. Sin embargo, el control ListView, a diferencia de otros controles, puede usar dos controles ImageList, que se establecen a través de las propiedades Icons y SmallIcons. Usar un control ImageList o ambos dependerá de la vista que vaya a usar, determinada por la propiedad View.
En las vistas de Lista, Iconos pequeños e Informe, puede usar un icono pequeño para representar cada objeto ListItem. Un control ImageList (especificado por la propiedad SmallIcons) suministra las imágenes que se usarán en cualquiera de estas tres vistas. Ya sea en tiempo de diseño o en tiempo de ejecución, establezca la propiedad SmallIcons al control ImageList que va a suministrar las imágenes. En tiempo de diseño, utilice el cuadro de diálogo Páginas de propiedades del control ListView para establecer el control ImageList para la propiedad SmallIcons. En tiempo de ejecución, utilice el código siguiente:
ListView1.SmallIcons = imlSmallIcons
Por el contrario, cuando está en vista de Iconos, el control utiliza un conjunto de imágenes distinto, suministrado por un segundo control ImageList. Para establecer la propiedad Icons a este segundo control ImageList en tiempo de diseño, utilice el cuadro de diálogo Páginas de propiedades. En tiempo de ejecución, emplee el código siguiente:
ListView1.Icons = imlIcons
Nota El control ImageList determina el tamaño de los iconos empleados. Los tamaños disponibles son 16 x 16, 32 x 32, 48 x 48 y Personalizado. Para obtener más información acerca del control ImageList, vea "Control ImageList"
Si piensa usar más de una vista y desea mostrar imágenes, debe establecer las propiedades SmallIcon e Icon de cada objeto ListItem. En el código siguiente se declara primero una variable de objeto de tipo ListItem y después se establece esa variable a un único objeto ListItem agregado a la colección con el método Add. A continuación se establecen las propiedades SmallIcon e Icon con la referencia de la variable de objeto:
Dim itmX as ListItem
Set itmX = ListView1.ListItems.Add()
' Se supone que existe en el control ImageList una
' imagen llamada "LibroPequeño" establecida en la
' propiedad SmallIcon.
itmX.SmallIcon = "LibroPequeño"
' Se supone que existe en el control ImageList una
' imagen llamada "LibroGrande" establecida en la
' propiedad Icon.
Una vez establecida una imagen con las propiedades SmallIcon e Icon, la imagen correcta aparecerá automáticamente al cambiar de vista con la propiedad View.
Los objetos ColumnHeader se muestran en la vista de Informe
Una característica exclusiva de la vista de Informe consiste en los objetos ColumnHeader. El control ListView contiene una colección de objetos ColumnHeader llamada ColumnHeaders.
El objeto ColumnHeader
El objeto ColumnHeader tiene una propiedad Text que muestra texto cuando el control se encuentra en vista de Informe. También puede establecer el ancho de cada objeto ColumnHeader con la propiedad Width y con la propiedad Alignment, que establece el alineamiento del texto mostrado en el objeto ColumnHeader. En el ejemplo de código siguiente se crean cuatro objetos ColumnHeader y se establecen sus propiedades Text y Width:
Dim colX As ColumnHeader ' Declara la variable.
Dim intX as Integer ' Variable contador.
For intX = 1 to 4
Set colX = ListView1.ColumnHeaders.Add()
colX.Text = "Campo " & intX
colX.Width = ListView1.Width / 4
Next intX
Establecimiento del texto de la columna con la colección ListSubItems
Observe que en todas las vistas, excepto en Informe, el objeto ListItem sólo muestra una etiqueta: la propiedad Text. Sin embargo, en la vista de Informe, todos los objetos ListSubItem pueden tener varios elementos de texto. Por ejemplo, la "Hitchhiker's Guide to Visual Basic…" tiene asociados un autor ("Vaughn, William R."), un año (1996) y un número de ISBN. Cada uno de estos elementos de texto es miembro de la colección ListSubItems. Para crear un objeto ListSubItem, utilice el método Add para la colección ListSubItems. Por tanto, para establecer el autor, el año y el número de ISBN de un objeto ListItem, el código podría tener la apariencia siguiente:
' El control se llama lvwAuthor.
lvwAuthor.ListItems(23).ListSubItems.Add , , _
"Hitchhiker's Guide to Visual Basic and SQL Server"
lvwAuthor.ListItems(23).ListSubItems.Add , , _
"Vaughn, William R."
lvwAuthor.ListItems(23).ListSubItems.Add , , "1996"
lvwAuthor.ListItems(23).ListSubItems.Add , , " 1-55615-906-4"
Nota La matriz ListItems utilizada en las versiones 4.0 y 5.0 de Visual Basic ha sido sustituida por la colección ListSubItems.
Los subelementos dependen de la presencia de los objetos ColumnHeader
Tanto la presencia como el número de objetos ListSubItem dependen de la presencia y el número de objetos ColumnHeader. Es decir, no puede crear ningún objeto ListSubItem si no hay presentes objetos ColumnHeader. Además, el número de objetos ColumnHeader determina el número de objetos ListSubItem que puede establecer para el objeto ListItem, que serán siempre uno menos que el número de objetos ColumnHeader. Esto se debe a que el primer objeto ColumnHeader siempre está asociado a la propiedad Text del objeto ListItem, como se muestra a continuación:
El primer objeto ColumnHeader y los objetos SubItem
Por tanto, si el número de objetos ColumnHeader del ejemplo anterior es 4, el número máximo de miembros de la colección ListSubItems que puede establecer es 3.
ColumnClick (Evento)
Se produce cuando se hace clic en un objeto ColumnHeader de un control ListView. Sólo está disponible en la vista Informe.
Sintaxis
Private Sub objeto_ColumnClick(ByVal encabezadoColumna As ColumnHeader)
La sintaxis del evento ColumnClick consta de las siguientes partes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorComentarios
Las propiedades Sorted, SortKey y SortOrder se utilizan normalmente en el código para ordenar los objetos ListItem en la columna donde se ha hecho clic.
Slider (Control)
Un control Slider es una ventana que contiene un control deslizante y unas marcas opcionales. Puede mover el control deslizante si lo arrastra, hace clic con el mouse (ratón) en uno de sus lados o a través del teclado.
Sintaxis
Slider
Comentarios
Los controles Slider son útiles cuando desea seleccionar un valor discreto o un conjunto de valores consecutivos de un intervalo. Por ejemplo, puede usar un control Slider para establecer el tamaño de una imagen mostrada moviendo el control deslizante hasta una marca determinada, en lugar de escribir un número. Para seleccionar un intervalo de valores, establezca la propiedad SelectRange a True y programe el control de modo que seleccione un intervalo cuando esté presionada la tecla MAYÚS.
El control Slider puede orientarse horizontal o verticalmente.
Nota para la distribución Para usar el control Slider en una aplicación, debe agregar el archivo MSCOMCTL.OCX al proyecto. Al distribuir la aplicación, instale el archivo MSCOMCTL.OCX en el directorio System o System32 de Microsoft Windows del usuario. Para obtener más información acerca de cómo agregar un control ActiveX a un proyecto, vea el Manual del programador.
Usar el control Slider
El control Slider está formado por una escala, definida por las propiedades Min y Max, y un "cursor" que el usuario final puede mover con el mouse (ratón) o con las teclas de dirección. En tiempo de ejecución se pueden restablecer dinámicamente las propiedades Min y Max para reflejar un nuevo intervalo de valores. La propiedad Value devuelve la posición actual del cursor. Mediante eventos como MouseDown y MouseUp, es posible usar el control Slider para seleccionar gráficamente un intervalo de valores.
Aplicaciones posibles
Propiedades TickStyle y TickFrequency
El control Slider consta de dos componentes: el cursor y las marcas, como se muestra a continuación:
La apariencia del control depende de la propiedad TickStyle. En resumen, las marcas pueden aparecer a lo largo del borde inferior del control, como en la ilustración anterior (que es el estilo predeterminado), a lo largo del borde superior, en ambos lados o en ninguno de ellos.
Además de colocar las marcas, también puede programar cuántas marcas aparecerán en el control si establece la propiedad TickFrequency. Esta propiedad, junto con Min y Max, determina el número de marcas que aparecerán en el control. Por ejemplo, si el valor de Min es 0, el de Max 100 y el de TickFrequency es 5, habrá una marca por cada cinco incrementos, para dar un total de 21 marcas. Si restablece las propiedades Min y Max en tiempo de ejecución, el número de marcas puede determinarse con el método GetNumTicks, que devuelve el número de marcas del control.
Establecer las propiedades Min y Max en tiempo de diseño o en tiempo de ejecución
Las propiedades Min y Max determinan los límites superior e inferior del control Slider y puede establecerlas tanto en tiempo de diseño como en tiempo de ejecución. En tiempo de diseño, haga clic con el botón secundario del mouse en el control y, después, haga clic en Propiedades para mostrar el cuadro de diálogo Páginas de propiedades, que se muestra a continuación:
En tiempo de ejecución puede restablecer los valores de Min y Max para adaptarlos a intervalos diferentes. Por ejemplo, si va a usar un control Slider para cambiar valores de una base de datos, puede usar el mismo control y enlazarlo a campos distintos según la tabla que el usuario esté modificando.
Propiedades SmallChange y LargeChange
Las propiedades SmallChange y LargeChange determinan la forma en que el control Slider aumentará o disminuirá cuando el usuario haga clic en él. La propiedad SmallChange determina el número de marcas que se desplazará el cursor cuando el usuario presione las teclas de flecha a la izquierda o a la derecha. La propiedad LargeChange especifica el número de marcas que se desplazará el cursor cuando el usuario haga clic en el control o cuando presione las teclas RE PÁG o AV PÁG.
Seleccionar intervalos
Si el valor de la propiedad SelectRange es True, el control Slider cambiará de apariencia, quedando de esta forma:
Para seleccionar un intervalo de valores, debe usar las propiedades SelStart y SelLength. Encontrará un ejemplo detallado de este método en "Situación 2 de Slider: seleccionar un intervalo de valores con el control Slider", en este mismo capítulo.
Situación 2 de Slider: seleccionar un intervalo de valores con el control Slider
Otra característica del control Slider es su capacidad para seleccionar un intervalo de valores. En esta implementación, cuando el usuario presiona la tecla mayús mientras hace clic en el control Slider, se produce el evento MouseDown. En el código de este evento se establecen las propiedades SelectRange y SelStart. Cuando el usuario suelta el botón del mouse, se produce el evento MouseUp y en el código correspondiente se establece la propiedad SelLength, a partir de la cual puede extraer un intervalo de valores.
En el código siguiente se utilizan estos objetos:
Para seleccionar un intervalo de valores con el control Slider
Establecer en True la propiedad SelectRange del control Slider
Para permitir la selección de un intervalo de valores es necesario establecer en True la propiedad SelectRange. Un lugar para hacerlo es el evento Load del objeto Form, como se muestra a continuación:
Private Sub Form_Load()
sldSelect.SelectRange = True
End Sub
Como alternativa, puede establecer la propiedad en True en tiempo de diseño; para ello, haga clic con el botón secundario del mouse en el control y haga luego clic en Propiedades para abrir el cuadro de diálogo Páginas de propiedades.
Evento MouseDown: comprobar si la tecla MAYÚS está presionada
Para seleccionar un intervalo, el usuario debe mantener presionada la tecla mayús al mismo tiempo que mueve el cursor del control Slider. El evento MouseDown tiene un argumento shift que permite determinar si se está presionando la tecla mayús. Puede usar la instrucción If para comprobarlo, como se indica a continuación:
Private Sub sldSelect_MouseDown _
(Button As Integer, Shift As Integer, _
x As Single, y As Single)
If Shift = 1 Then
' Si el usuario está presionando MAYÚS,
' controle aquí el evento.
End If
End Sub
Evento MouseDown: establecer las propiedades SelStart y SelLength
Si el usuario está presionando la tecla mayús, el código establecerá las propiedades SelStart y SelLength en los valores que corresponda. La propiedad SelStart especifica el punto donde comienza la selección de valores. En el contexto actual, la propiedad SelStart se establecerá en el punto donde se encuentre el cursor (es decir, el valor de la propiedad Value del control Slider).
La propiedad SelLength especifica el intervalo de valores para seleccionar, comenzando por el valor de SelStart. En el evento MouseDown se selecciona un nuevo intervalo, por lo que habrá que anular la selección de cualquier intervalo anterior estableciendo la propiedad SelLength en 0. Esto se ilustra en el código siguiente:
sldSelect.SelStart = SldResize.Value
' Establece 0 en lugar del valor anterior
' de SelLength (si tenía alguno).
sldSelect.SelLength = 0
Evento MouseUp: establecer SelLength en la propiedad Value - SelStart
Para seleccionar un intervalo, el usuario debe mantener presionada la tecla mayús mientras arrastra el mouse. El código para establecer el nuevo valor se encuentra por tanto en el evento MouseUp, que se produce cuando el usuario suelta el cursor del control Slider. El código siguiente establece la propiedad SelLength con una fórmula sencilla: el valor del cursor menos el valor de la propiedad SelStart.
sldSelect.Value - sldSelect.SelStart
Sin embargo, es posible que el usuario suelte la tecla mayús mientras está seleccionando un intervalo. En este caso no se produciría ninguna selección. Por tanto, el código anterior sólo se ejecutará si la tecla mayús continúa presionada. Al igual que ocurre con el evento MouseDown, una instrucción If puede encargarse de comprobar esta posibilidad:
Private Sub sldSelect_MouseUp _
(Button As Integer, Shift As Integer, _
x As Single, y As Single)
If Shift = 1 Then
' Si el usuario selecciona hacia atrás desde
' un punto, se producirá un error.
On Error Resume Next
' De lo contrario se establece SelLength
' mediante SelStart y el valor actual.
sldSelect.SelLength = _
sldSelect.Value - sldSelect.SelStart
Else
' Si el usuario suelta la tecla MAYÚS,
' establece SelLength en 0 (para desactivar el
' intervalo) y termina.
sldSelect.SelLength = 0
End If
End Sub
El código completo
A continuación se incluye el código completo:
Private Sub Form_Load()
sldSelect.SelectRange = True
End Sub
Private Sub sldSelect_MouseDown _
(Button As Integer, Shift As Integer, _
x As Single, y As Single)
If Shift = 1 Then
sldSelect.SelStart = sldSelect.Value
' Establece 0 en vez del valor anterior
' de SelLength (si tenía alguno).
sldSelect.SelLength = 0
End If
End Sub
Private Sub sldSelect_MouseUp _
(Button As Integer, Shift As Integer, _
x As Single, y As Single)
If Shift = 1 Then
' Si el usuario selecciona hacia atrás desde
' un punto, se producirá un error.
On Error Resume Next
' De lo contrario, se establece SelLength
' mediante SelStart y el valor actual.
sldSelect.SelLength = _
sldSelect.Value - sldSelect.SelStart
Else
' Si el usuario suelta la tecla MAYÚS,
' establece SelLength en 0 (para desactivar
' el intervalo) y termina.
sldSelect.SelLength = 0
End If
End Sub
TabStrip (Control)
Un control TabStrip es como los separadores de un cuaderno o las etiquetas de un grupo de carpetas de archivo. Mediante un control TabStrip puede definir varias páginas para la misma área de una ventana o cuadro de diálogo en su aplicación.
Sintaxis
TabStrip
Comentarios
El control consiste en uno o más objetos Tab de una colección Tabs. Tanto en tiempo de diseño como en tiempo de ejecución puede cambiar la apariencia del objeto Tab estableciendo propiedades. También puede agregar y quitar fichas utilizando la Página de propiedades del control TabStrip en tiempo de diseño o bien agregar y quitar objetos Tab en tiempo de ejecución mediante métodos.
La propiedad Style determina si el control TabStrip tiene la apariencia de un botón de comando (Buttons) o de un separador de carpeta (Tabs). En tiempo de diseño, cuando pone un control TabStrip en un formulario, tiene un separador de carpeta. Si elige el valor tabTabs para la propiedad Style, habrá un borde alrededor del área interna del control TabStrip. Aunque el valor tabButtons de la propiedad Style no muestra ningún borde alrededor del área interna, esa área existe.
Para determinar el tamaño total del control TabStrip, use sus controladores de arrastre o establezca las propiedades Top, Left, Height y Width. Basándose en el tamaño total del control en tiempo de ejecución, Visual Basic determina automáticamente el tamaño y la posición del área interna y devuelve las propiedades de coordenadas del cliente: ClientLeft, ClientTop, ClientHeight y ClientWidth. La propiedad MultiRow determina si el control puede tener más de una fila de fichas, la propiedad TabWidthStyle determina la apariencia de cada fila y, si la propiedad TabWidthStyle se establece a tabFixed, puede usar las propiedades TabFixedHeight y TabFixedWidth para establecer el mismo alto y ancho para todas las fichas del control TabStrip.
El control TabStrip no es un contenedor. Para contener las páginas reales y sus objetos, debe usar controles Frame u otro tipo de contenedores que coincidan con el tamaño del área interna compartida por todos los objetos Tab del control. Si usa una matriz de controles para el contenedor, puede asociar cada elemento de la matriz con un objeto Tab específico, como en el siguiente ejemplo:
Option Explicit
Private mintCurFrame As Integer' Marco activo visible
Private Sub Tabstrip1_Click()
If Tabstrip1.SelectedItem.Index = mintCurFrame _
Then Exit Sub ' No necesita cambiar el marco.
' Oculte el marco antiguo y muestre el nuevo.
Frame1(Tabstrip1.SelectedItem.Index).Visible = True
Frame1(mintCurFrame).Visible = False
' Establece mintCurFrame al nuevo valor.
mintCurFrame = Tabstrip1.SelectedItem.Index
End Sub
Nota Cuando agrupe controles en un contenedor, es mejor usar mostrar u ocultar en vez de usar el método Zorder para traer al frente un marco de objeto. Por otra parte, los controles que tengan asociadas teclas de acceso (ALT + tecla de acceso) aún responderán a los comandos de teclado, aunque el contenedor no sea el control más alto. Observe también que debe separar los grupos de los controles OptionButton para ubicar cada grupo en su propio contenedor, o por el contrario todos los controles OptionButtons del formulario se comportarán como un gran grupo de controles OptionButtons.
Sugerencia Utilice un control Frame con su BorderStyle establecido a None como el contenedor, en lugar de un control PictureBox. Un control Frame produce menos sobrecarga que un control PictureBox.
La propiedad Tabs del control TabStrip es la colección de todos los objetos Tab. Cada objeto Tab tiene propiedades asociadas con su estado y apariencia actuales. Por ejemplo, puede asociar un control ImageList con el control TabStrip y después usar imágenes en fichas individuales. También puede asociar una información sobre herramientas con cada objeto Tab.
Nota para la distribución El control TabStrip forma parte de un grupo de controles personalizados que se encuentran en el archivo MSCOMCTL.OCX. Para usar el control TabStrip en su aplicación, debe agregar el archivo MSCOMCTL.OCX al proyecto. Cuando distribuya su aplicación, instale el archivo MSCOMCTL.OCX en el directorio SYSTEM de Microsoft Windows del usuario. Para obtener más información acerca de cómo agregar un control personalizado a un proyecto, vea el Manual del programador.
Usar el control TabStrip
Un control TabStrip actúa como los separadores de un cuaderno o las etiquetas de un grupo de carpetas de archivador. Con el control TabStrip puede definir múltiples páginas en la misma área de una ventana o un cuadro de diálogo de una aplicación.
Aplicaciones posibles
La colección Tabs
El control consta de uno o más objetos Tab de una colección Tabs. En tiempo de diseño y en tiempo de ejecución puede modificar la apariencia de los objetos Tab si establece sus propiedades y además, en tiempo de ejecución, si invoca métodos para agregar y quitar objetos Tab.
Asociar el control ImageList al control TabStrip
Para identificar la función de una ficha, puede asignar una imagen del control ImageList al objeto Tab. Para ello, primero debe asociar un control ImageList al control TabStrip, lo que puede hacer en tiempo de diseño o en tiempo de ejecución.
Para asociar un control ImageList a un control TabStrip en tiempo de diseño
Private Sub Form_Load()
' El control TabStrip se llama "tabRTF" y el
' control ImageList se llama "imlRTF".
tabRTF.ImageList = imlRTF
End Sub
Crear fichas en tiempo de diseño o en tiempo de ejecución
Puede crear objetos Tab tanto en tiempo de diseño como en tiempo de ejecución. Para crear objetos Tab en tiempo de diseño, utilice el cuadro de diálogo Páginas de propiedades.
Para crear objetos Tab en tiempo de diseño
Figura 2.36 Páginas de propiedades de TabStrip
Crear objetos Tab en tiempo de ejecución con el método Add
Para crear objetos Tab en tiempo de ejecución, utilice el método Add de los objetos Tab.
Nota De forma predeterminada se crea un objeto Tab.
Para crear una colección de objetos Tab en tiempo de ejecución
El código siguiente utiliza el evento Load del objeto Form para crear dos objetos Tab y luego establece sus propiedades Caption, Image y Key.
Private Sub Form_Load()
' El control TabStrip se llama "tabData"
' Declara una variable y después utiliza la
' instrucción Set con el método Add para crear un
' nuevo objeto Tab, al tiempo que establece la
' variable de objeto en la nueva ficha. Utiliza la
' referencia para establecer las propiedades.
Dim tabX As Tab
' Tab 1: Buscar texto.
Set tabX = tabData.Tabs.Add()
tabX.Key = "buscar"
tabX.Caption = "Buscar"
tabX.Image = "buscar" ' Se supone que existe la imagen.
' Tab 2: Dibujar objetos.
Set tabX= tabData.Panels.Add()
tabX.Key = "dibujar"
tabX.Caption = "Dibujar"
tabX.Image = "dibujar" ' Se supone que existe esta imagen.
End Sub
Sugerencia Usar el método Add sin establecer la variable de objeto es más eficiente que establecer las propiedades con la variable de objeto. En este caso, el código anterior se volvería a escribir de este modo:
tabData.Tabs.Add , "buscar", "Buscar", "buscar"
tabData.Tabs.Add , "dibujar", "Dibujar", "dibujar"
Usar el área de cliente para colocar controles contenedores
El control TabStrip se suele usar para crear cuadros de diálogo con fichas. Cada página del cuadro de diálogo consta de una ficha y un área de cliente, como se muestra en la figura siguiente:
En tiempo de ejecución, cuando el usuario hace clic en una ficha, debe programar la reconfiguración del área de cliente con un conjunto distinto de controles contenedores (como se explica posteriormente en "Administrar fichas y controles contenedores").
En tiempo de diseño, dibuje en el formulario un control contenedor, por ejemplo un control PictureBox o Frame. Si utiliza un control Frame, puede establecer su propiedad BorderStyle para que sea invisible en tiempo de ejecución. Copie y pegue el mismo control para crear una matriz de controles; cree un control por cada objeto Tab que haya creado.
En cada control contenedor, dibuje los controles que deban aparecer en una ficha. El formulario puede tener una apariencia similar al de la figura 2.37:
Figura 2.37 TabStrip en tiempo de diseño con dos controles PictureBox
Después de haber creados los controles contenedores, se requiere una técnica adicional para colocarlos en el área de cliente del control TabStrip: usar el método Move con las propiedades ClientLeft, ClientTop, ClientWidth y ClientHeight del control TabStrip, como ilustra el código siguiente:
Private Sub Form_Load()
' El control TabStrip se llama "tabRTF".
' El control Frame se llama "fraTab".
For i = 0 To fraTab.Count - 1
With fraTab(i)
.Move tabRTF.ClientLeft, _
tabRTF.ClientTop, _
tabRTF.ClientWidth, _
tabRTF.ClientHeight
End With
Next i
End Sub
Administrar fichas y controles contenedores
Un cuadro de diálogo con fichas contiene más de un objeto Tab. Como hemos visto, debe haber asociado un control Frame (o cualquier otro control contenedor) a cada objeto Tab. Para administrar eficazmente los diversos objetos Tab y los controles contenedores asociados, puede usar la estrategia siguiente:
El código para traer al frente el control contenedor correcto será entonces similar al siguiente:
Private Sub tabRTF_Click()
picRTF(tabRTF.SelectedItem.Index - 1).ZOrder 0
End Sub
Sugerencia En tiempo de diseño, puede establecer la propiedad Index de la matriz de controles de modo que sea una matriz basada en 1. Debido a que la colección Tabs también empieza a contar por 1, el código anterior quedaría de la forma siguiente:
picRTF(TabRTF.SelectedItem.Index).ZOrder 0
Para obtener más información Encontrará un ejemplo de código que implementa la estrategia expuesta aquí en "Situación de TabStrip: crear un cuadro de diálogo con fichas".
Propiedad Style: botones o fichas
La propiedad Style determina si el control TabStrip tiene apariencia de
separadores de un cuaderno (Tabs),
o de botones de comando (Buttons).
A continuación se indican las ventajas de cada opción:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior
Fichas en varias filas
Otra característica del control TabStrip es la propiedad MultiRow. Cuando su valor es True, los objetos Tab aparecen en filas, como en la figura siguiente:
Si el valor de la propiedad MultiRow es False, el mismo conjunto de fichas aparece en una única fila, con dos botones de desplazamiento en el extremo derecho:
La propiedad TabWidthStyle determina la apariencia de cada fila y, si su valor es Fixed, puede usar las propiedades TabFixedHeight y TabFixedWidth para establecer el mismo alto y ancho para todas las fichas del control TabStrip.
SSTab (Control)
El control SSTab proporciona un grupo de fichas, cada una de las cuales actúa como contenedor de otros controles. En el control sólo hay al mismo tiempo una ficha activa; esta ficha muestra los controles que contiene al tiempo que oculta los de las demás fichas.
Sintaxis
SSTab
Comentarios
El control SSTab se asemeja a los separadores de un cuaderno o a las etiquetas de un grupo de carpetas de un archivador. Con el control SSTab puede definir varias páginas para la misma área de una ventana o un cuadro de diálogo de una aplicación. Con las propiedades de este control puede hacer lo siguiente:
Para usar este control, primero debe decidir cómo desea disponer los controles en las distintas fichas. Establezca las propiedades Tabs y TabsPerRow para crear las fichas y organizarlas por filas. A continuación, seleccione cada ficha en tiempo de diseño haciendo clic en ella. En cada ficha, dibuje los controles que desee que aparezcan cuando el usuario la seleccione. Establezca las propiedades Caption, Picture, TabHeight y TabMaxWidth a los valores necesarios para personalizar la parte superior de la ficha.
En tiempo de ejecución los usuarios podrán desplazarse por las fichas si presionan Ctrl-Tab o utilizando las teclas aceleradoras definidas en el título de cada ficha.
También puede personalizar todo el control SSTab con las propiedades Style, ShowFocusRect, TabOrientation y WordWrap.
Nota para la distribución El control SSTab se encuentra en el archivo TABCTL32.OCX. Para usar el control SSTab en una aplicación, debe agregar el archivo .OCX del control al proyecto. Al distribuir la aplicación, instale el archivo .OCX correspondiente en el directorio System o System32 de Microsoft Windows del usuario. Para obtener más información acerca de la forma de agregar un control adicional a un proyecto, vea el Manual del programador de Visual Basic.
Usar el control Tabbed Dialog
El control Microsoft Tabbed Dialog proporciona un método sencillo para presentar varios cuadros de diálogo o pantallas de información en un único formulario utilizando la misma interfaz que aparece en numerosas aplicaciones comerciales para Microsoft Windows.
El control Tabbed Dialog ofrece un grupo de fichas, cada una de las cuales actúa como un contenedor para otros controles. Sólo hay una ficha activa al mismo tiempo, que muestra los controles que contiene y oculta los de las fichas restantes.
Figura 2.30 El control Tabbed Dialog
Aplicaciones posibles
Establecer las fichas y las filas de fichas
Antes de establecer el número de fichas que desea agregar al control Tabbed Dialog, debe decidir qué contendrá el cuadro de diálogo y cómo se organizará ese contenido.
Aunque el número de fichas se puede establecer tanto en tiempo de diseño como en tiempo de ejecución, muy probablemente encontrará más rápido y sencillo hacerlo en tiempo de diseño. Puede establecer las propiedades en tiempo de diseño en el cuadro de diálogo Páginas de propiedades que aparece al hacer clic en el control con el botón secundario del mouse (ratón) y seleccionar Propiedades.
Figura 2.31 Establecer las propiedades en tiempo de diseño
Para definir el número de fichas y filas del cuadro de diálogo, establezca las propiedades Tab y TabsPerRow. Por ejemplo, si desea crear un cuadro de diálogo que contenga doce fichas, establezca en ‘12’ la opción Número de fichas y en ‘4’ la opción TabsPerRow. De este modo creará un cuadro de diálogo con tres filas de cuatro fichas cada una. De forma predeterminada, el número de fichas es 3.
Cuando se ha establecido el número de fichas y de filas, cada ficha se indexa para poder seleccionarlas individualmente. Por ejemplo, puede seleccionar fichas individuales en la opción Ficha actual para cambiar la propiedad TabCaption. La indexación de las fichas comienza por cero (0).
En tiempo de ejecución, el usuario puede desplazarse por las fichas al hacer clic en ellas, presionar Ctrl-Tab o emplear métodos mnemotécnicos definidos en el título de cada ficha. Por ejemplo, si desea crear una ficha llamada Imprimir y permitir al usuario el acceso a ella con la combinación de teclas Alt-I, establezca la propiedad TabCaption como ‘&Imprimir’.
Agregar controles a las fichas
Cada ficha del control Tabbed Dialog es en esencia un contenedor de otros controles. Al crear un cuadro de diálogo con fichas, se suelen agrupar en cada una los controles que realizan funciones similares, como imprimir un documento o establecer opciones de presentación de la aplicación. Cuando haya determinado el número de fichas necesario en el cuadro de diálogo, agregue los controles que precise para realizar tales funciones.
Para agregar controles a páginas de fichas individuales en tiempo de diseño, seleccione primero la ficha haciendo clic en ella y, luego, dibuje los controles en la página de la ficha.
Nota No debe agregar controles a páginas de fichas individuales con el método del doble clic. Si hace doble clic en un control en el cuadro de herramientas, el control se agregará a todas las fichas del control Tabbed Dialog.
Para obtener más información Vea "Contenedores de controles" en el tema "Usar el control contenedor OLE" del Manual del programador.
Activar y desactivar fichas en tiempo de ejecución
Según la funcionalidad de la aplicación o de un cuadro de diálogo específico que ha creado, puede que desee desactivar algunas fichas en situaciones determinadas. Para ello puede usar la propiedad TabEnabled, que permite activar y desactivar fichas individuales. Cuando una ficha está desactivada, el texto que contiene aparece atenuado y el usuario no puede seleccionarla. Por ejemplo:
SSTab1.TabEnabled(2) = False
La propiedad TabEnabled especifica el número de ficha y, después, la desactiva estableciendo su valor en False.
Nota Puede usar la propiedad Enabled para activar o desactivar todo el control Tabbed Dialog.
Propiedades de personalización de las fichas
Las propiedades del control Tabbed Dialog permiten personalizar la apariencia y funcionalidad de los cuadros de diálogo con fichas. Puede establecer estas propiedades en tiempo de diseño en las Páginas de propiedades del control o en tiempo de ejecución en el código.
La propiedad Style
La propiedad Style ofrece dos opciones para establecer el estilo del cuadro de diálogo con fichas. De forma predeterminada, la propiedad Style está establecida en la apariencia de un cuadro de diálogo con fichas de Microsoft Office. Las fichas que aparecen cuando está seleccionada esta opción tienen una apariencia similar a las de Microsoft Office para las aplicaciones para Microsoft Windows 3.1. De forma predeterminada, el texto del título de la ficha seleccionada aparece en negrita.
Figura 2.32 Estilo de los cuadros de diálogo con fichas de Microsoft Office
La segunda opción disponible es el estilo de las Páginas de propiedades de Windows 95. Este estilo sigue los estándares de la interfaz de usuario desarrollados para Windows 95. El texto del título de la ficha seleccionada, a diferencia del estilo Microsoft Office, no aparece en negrita.
Figura 2.33 Estilo de los cuadros de diálogo con fichas para las Páginas de propiedades de Windows 95
Para establecer esta propiedad en tiempo de ejecución, utilice las constantes de Visual Basic ssStyleTabbedDialog o ssStylePropertyPage con el fin de especificar uno u otro estilo.
La propiedad TabOrientation
La propiedad TabOrientation permite ubicar las fichas del cuadro de diálogo en cualquiera de los cuatro lados (arriba, abajo, izquierda o derecha). Por ejemplo:
Figura 2.34 Orientación de las fichas hacia la izquierda
Cuando establezca para las fichas una orientación distinta de arriba o abajo, también debe cambiar el estilo de fuente de las mismas. Si establece la orientación a la izquierda o a la derecha, el texto queda vertical y sólo pueden aparecer las fuentes TrueType® en sentido vertical en el control Tabbed Dialog. Cambie el estilo de las fuentes con la propiedad Font o seleccionando la ficha Fuente en las páginas de propiedades del control. La fuente Arial es un sustituto habitual de la fuente Sans Serif predeterminada de Windows.
Puede establecer esta propiedad en tiempo de ejecución mediante las siguientes constantes de Visual Basic: ssTabOrientationTop, ssTabOrientationBottom, ssTabOrientationLeft y ssTabOrientationRight.
La propiedad Picture
Puede agregar imágenes (mapas de bits, iconos o metarchivos) a cualquiera o a todas las fichas del control Tabbed Dialog. Por ejemplo:
Figura 2.35 Agregar una imagen a una ficha
En tiempo de diseño, para establecer la propiedad Picture de una ficha, haga clic en ella y establézcala en la ventana Propiedades. En tiempo de ejecución, puede establecer la propiedad Picture con la función LoadPicture o con la propiedad Picture de otro control o de un objeto Form.
Nota Al establecer la propiedad Picture en tiempo de diseño, el gráfico se guarda y se carga con el objeto Form que contiene el control Tabbed Dialog. Si crea un archivo ejecutable, el archivo contendrá la imagen. Los gráficos que carga en tiempo de ejecución no se guardan con la aplicación.
Al establecer la propiedad Picture, afecta al valor de la propiedad TabPicture de la ficha actual y se muestra la imagen en la ficha activa.
Ajustar el alto y el ancho de las fichas
Según el tamaño de la imagen, puede que sea necesario modificar el alto de la ficha para adaptarlo. Puede usar la propiedad TabMaxHeight para ajustar el alto de las fichas. Esta propiedad establece el alto de todas las fichas del control. No es posible ajustarlas individualmente.
Si está utilizando un cuadro de diálogo con fichas al estilo de Microsoft Office, es posible que también necesite establecer la propiedad TabMaxWidth para que tanto la imagen como el texto quepan en la ficha. Si utiliza el estilo de Windows 95, la propiedad TabMaxWidth se pasa por alto y el ancho de cada ficha se adapta al de la imagen y el texto de su título.
Establecer la propiedad WordWrap
Cuando utilice el estilo de Microsoft Office en un cuadro de diálogo con fichas, puede especificar el ancho exacto de las mismas con la propiedad TabMaxWidth. Una vez hecho esto, puede dejar que los títulos de las fichas continúen en la línea siguiente, si es necesario, estableciendo la propiedad WordWrap en True. Aunque el texto del título pase a la línea siguiente, seguirá teniendo la limitación del alto y el ancho de las fichas. Es decir, sigue siendo posible que el texto se recorte o quede oculto si el alto y el ancho son insuficientes.
En el estilo de los cuadros de diálogo con fichas de Windows 95, el ancho se basa en la longitud del texto del título y se pasa por alto el valor de las propiedades TabMaxWidth y WordWrap.
Completar el cuadro de diálogo con fichas personalizado
Una vez agregados todos los controles deseados a cada una de las fichas, puede terminar de diseñar el cuadro de diálogo con fichas personalizado de forma que parezca un modelo estándar. Por ejemplo, si desea que aparezca como un cuadro de diálogo estándar Páginas de propiedades de Windows 95, siga estos pasos:
DateTimePicker (Control)
Utilice el control DateTimePicker para proporcionar un campo de fecha con formato que facilite la selección de la fecha. Además, los usuarios pueden seleccionar una fecha a partir de una interfaz de calendario desplegable similar a la de un control MonthView.
Sintaxis
DTPicker
Comentarios
El control DateTimePicker tiene dos modos de funcionamiento:
Es posible personalizar la apariencia del calendario desplegable del control. Existen varios atributos de color como CalendarBackColor, CalendarForeColor, CalendarTitleBackColor, CalendarTitleForeColor y CalendarTrailingForeColor que le permiten crear combinaciones de colores exclusivos.
Se puede usar el control con el teclado o con el mouse (ratón) indistintamente. El calendario desplegable posee dos botones que permiten mostrar los meses siguientes y anteriores.
Nota El control DateTimePicker forma parte de un grupo de controles ActiveX incluidos dentro del archivo MSCOMCT2.OCX. Debe agregar el archivo MSCOMCT2.OCX al proyecto para poder usar el control DateTimePicker en su aplicación. Cuando distribuya su aplicación, instale el archivo MSCOMCT2.OCX en el directorio System o System32 de Microsoft Windows. Para obtener más información acerca de cómo agregar un control ActiveX a un proyecto, vea "Agregar controles a un proyecto" en el Manual del programador.
Usar el control DateTimePicker
El control DateTimePicker muestra información de fecha, de hora o ambas a la vez y actúa como una interfaz en la que los usuarios pueden modificar la información de fecha y de hora. La vista del control consiste en campos definidos mediante la cadena de formato del control. Cuando el control DateTimePicker está desplegado, aparece un calendario MonthView.
El control tiene dos modos de funcionamiento diferentes:
Puede usar el control para mostrar la fecha en los varios formatos preestablecidos, entre los cuales están: fecha corta (14/11/97), fecha larga (Viernes, 14 de noviembre de 1997) y hora (7:00:00 PM). También puede posible especificar formatos personalizados mediante el uso de cadenas de formato o bien puede crear sus propios formatos mediante campos de devolución de llamadas.
Control DateTimePicker en modo Calendario desplegable
Control DateTimePicker en modo formato de hora
Posibles aplicaciones
Usar los dos modos del control
El control DateTimePicker funciona como un control de edición con máscara para permitir escribir valores de fecha y hora. Cada parte de la fecha o de la hora se considera un campo separado dentro de la parte de edición del control. A medida que el usuario hace clic en cada campo, éste queda resaltado y es posible usar las teclas de dirección arriba y abajo para aumentar o disminuir el valor del campo. El usuario puede también escribir valores directamente dentro del control, cuando es posible hacerlo.
La propiedad UpDown determina en qué modo se encuentra el control. Cuando UpDown tiene el valor False, el control está en modo Calendario desplegable (el valor predeterminado). Cuando la propiedad UpDown tiene el valor True, el control DateTimePicker está en modo formato de hora.
En el modo formato de hora, dos flechas de desplazamiento aparecen a la derecha del control. El usuario puede hacer clic en estas flechas con el mouse par aumentar o reducir el valor del campo seleccionado actual. En el modo Calendario desplegable, el control despliega un calendario en el que el usuario puede seleccionar fechas.
El calendario desplegable posee la mayoría de las características del control MonthView. Vea "Usar el control MonthView" para obtener más información acerca de cómo establecer y aplicar formato a la parte de calendario desplegable del control DateTimePicker.
Establecer y devolver fechas
La propiedad Value determina la fecha seleccionada actual. Es posible establecer el valor del control antes de que aparezca esta propiedad (por ejemplo, en tiempo de diseño o en el evento Form_Load) con el fin de determinar qué fecha estará inicialmente seleccionada en el control:
DTPicker1.Value = "31/10/97"
De forma predeterminada, el valor de la propiedad Value del control es el de la fecha actual. Si cambia su propiedad Value desde el código, el control DateTimePicker se actualiza automáticamente para reflejar el nuevo valor.
La propiedad Value devuelve un valor de fecha sin formato o bien un valor Null. El control DateTimePicker posee numerosas propiedades que devuelven información específica acerca de la fecha mostrada:
Utilice el evento Change para determinar cuándo el usuario cambió el valor de la fecha en el control.
Usar el control Checkbox para no seleccionar ninguna fecha
La propiedad CheckBox permite especificar si el control debe devolver una fecha. De forma predeterminada, CheckBox tiene el valor False y el control siempre devuelve una fecha.
Para permitir al usuario no especificar fecha, establezca la propiedad CheckBox a True (por ejemplo, cuando utiliza el control DateTimePicker para escribir la fecha de finalización de un proyecto, el cual no ha sido todavía completado).
Cuando CheckBox tiene el valor True, una pequeña casilla de verificación aparece en la parte de edición del control a la izquierda de la fecha y hora. Si la casilla no ha sido activada, la propiedad Value devuelve un valor Null. Si el usuario activa esta casilla, el control devuelve la fecha mostrada a través de la propiedad Value.
Trabajar con formatos de fecha y hora
El control DateTimePicker aporta una flexibilidad impresionante a la hora de aplicar formatos a la presentación de fechas y de horas en el control. Es posible usar todas las cadenas de formato estándar de Visual Basic o bien crear formatos personalizados mediante campos de devolución de llamadas.
La propiedad Format determina cómo el control aplicará un formato al valor de fecha sin formato. Puede elegir una de las opciones de formato predefinidas o bien usar las características de formato personalizadas del control.
La propiedad CustomFormat define la expresión de formato utilizada para mostrar el contenido del control. Especifique una cadena de formato que indique cómo el control aplicará formato a la fecha en la salida. El control DateTimePickers admite las cadenas de formatos siguientes:
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorEs posible agregar texto literal a la cadena de formato. Si desea usar el control para mostrar la fecha actual con el formato "Hoy estamos a: 05:30:31 viernes 14 nov., 1997". Podría usar un formato de cadena como el siguiente "'Hoy estamos a: 'hh':'m':'s ddddMMMdd', 'yyy". El texto literal debe encerrarse entre comillas sencillas (').
Crear formatos personalizados con campos de devolución de llamadas
Uno de los campos con formato personalizado antes descrito es un campo de devolución de llamada. Un campo de devolución de llamada permite personalizar la salida de ciertas partes de una cadena de formato. Para declarar un campo de devolución de llamada, incluya uno o más caracteres 'X' (código ASCII 88) en cualquier lugar dentro de la cadena de formato. Los campos de devolución de llamada se muestran en orden, de izquierda a derecha.
Cuando se usa un formato con uno o más campos de devolución de llamada para mostrar una nueva fecha, se generan eventos Format y FormatSize para cada uno de estos campos de devolución de llamada. Utilice el evento Format para especificar una cadena de respuesta personalizada, y el evento FormatSize para determinar el espacio requerido para mostrar la cadena. Este comportamiento proporciona un control completo sobre la presentación de un campo de devolución de llamada.
Cada secuencia de caracteres X tiene un significado único. Por ejemplo, X podría significar "º" (correspondiente a "1º", "2º", etc.) y "XX" correspondería a "primero", "segundo", etc. Dichos campos no aplican formato al texto del usuario, sino que introducen el formato de fecha dentro de un formato de presentación.
Supongamos que, por ejemplo, desea mostrar el mes tanto en español como en inglés, mediante un formato como el siguiente:
July (Julio) 29
Podría crear un formato de cadena parecido al siguiente:
MMMM XXXX d
Al procesar los eventos Format y FormatSize puede determinar a qué tipo de campo de devolución de llamada corresponde el evento, comparando la cadena de formato de entrada con "XXXX". Si la cadena del campo coincide, puede generar una cadena "(Julio)" y calcular su longitud. El número de caracteres X sólo sirve para determinar cuál es el texto que se debe suministrar para un campo de devolución de llamada. Durante el tratamiento del evento FormatSize, es posible calcular el tamaño del texto mediante programa.
El evento Format se llama cada vez que el control necesita llenar el campo de devolución de llamada, por ejemplo cuando el usuario selecciona una fecha diferente de la del calendario desplegable. Sin embargo, el evento FormatSize sólo se llama cuando se produce un cambio en la cadena de formato (por ejemplo, si cambia la secuencia "XX" por "XXXX"). Esto significa que cuando calcula el tamaño del campo de devolución de llamada en el evento FormatSize es necesario tener en cuenta cualquier valor posible que el evento Format pueda devolver.
Por ejemplo, podría usar el procedimiento siguiente para implementar el campo de devolución de llamada de la cadena de formato mencionada antes.
Para crear campos de devolución individualizados, repita el carácter "X". Por tanto, la cadena de formato "XX dddd MMM dd', 'yyy XXX" contiene dos campos de devolución de llamadas. Puede usar instrucciones Select o If para procesar múltiples cadenas de devolución en los eventos Format y FormatSize.
Los campos de devolución de llamada se consideran como campos válidos, por lo que conviene que la aplicación esté preparada para controlar el evento CallbackKeyDown. Puede usar este evento para procesar pulsaciones de teclas individuales en el campo de devolución de llamada y para realizar una validación por teclado o facilitar un escritura automatizada. Por ejemplo, si el usuario se prepara para escribir un mes y escribe la letra "D", podría usar el evento CallbackKeyDown para llenar el campo de devolución de llamada con la palabra "Diciembre".
Aplicar un formato al control Calendar
Existen muchas opciones para aplicar formato a la parte desplegable del control. Todas las propiedades del control DateTimePicker que van precedidas por la palabra "Calendar" conciernen al formato de la lista desplegable del calendario. Estas propiedades corresponden a las propiedades del control MonthView. Por ejemplo, la propiedad CalendarTitleTextColor del control DateTimePicker es similar a la propiedad TitleTextColor del control MonthView. Vea el tema Usar el control MonthView para obtener más información relacionada con la aplicación de formatos al calendario.
Interfaz de teclado
Es posible controlar el control Calendar con el teclado. La siguiente tabla describe las distintas acciones que puede realizar con el control en tiempo de ejecución.
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorLa tabla siguiente describe las distintas acciones que puede realizar cuando se muestra el calendario desplegable.
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superiorNota para la distribución El control DateTimePicker forma parte de un grupo de controles ActiveX que se encuentran en el archivo MSCOMCT2.OCX. Debe agregar el archivo MSCOMCT2.OCX al proyecto para poder usar el control DateTimePicekr en la aplicación. Al distribuir la aplicación, instale el archivo MSCOMCT2.OCX en el directorio System o System32 de Microsoft Windows. Para obtener más información acerca de cómo agregar un control ActiveX a un proyecto, vea el Manual del programador.>
MonthView (Control)
Utilice el control MonthView para crear aplicaciones que permitan a los usuarios mostrar y establecer información de fecha mediante una interfaz parecida a un calendario.
Sintaxis
MonthView
Comentarios
La propiedad Valor del control MonthView devuelve la fecha seleccionada actualmente.
Para permitir a los usuarios del programa seleccionar un intervalo continuo de fechas, asigne a la propiedad MultiSelect el valor True y especifique con MaxSelProperty el número de días que podrán seleccionar. Las propiedades SelStart y SelEnd devuelven las flechas del principio y el final de una selección.
Existen muchas formas de personalizar la apariencia de un control MonthView. Existen varios atributos de colores, como MonthBackColor, TitleBackColor, TitleForeColor y TrailingForeColor, que le permiten crear combinaciones de colores exclusivas para el control.
Establezca las propiedades MonthRows y MonthColumns para mostrar más de un mes a la vez (hasta 12 meses) en un control MonthView. El número total de propiedades MonthRows y MonthColumns debe ser inferior o igual a 12.
Nota El control MonthView forma parte de un grupo de controles ActiveX incluidos dentro del archivo MSCOMCT2.OCX. Es necesario agregar el archivo MSCOMCT2.OCX al proyecto para poder usar el control MonthView en su aplicación. Al distribuir su aplicación, instale el archivo MSCOMCT2.OCX.ocx en el directorio System o System32 de Microsoft Windows. Para obtener más información acerca de cómo agregar un control ActiveX a un proyecto, vea "Agregar controles a un proyecto" en el Manual del programador.
Uso del control MonthView
El control MonthView ofrece a los usuarios la posibilidad de ver y establecer información de fecha mediante una interfaz parecida a un calendario. Los usuarios pueden seleccionar una fecha única o un intervalo de fechas.
Es posible explorar el control con el teclado o con el mouse indistintamente. Los botones en la parte superior del control sirven para desplazarse y mostrar los meses siguientes y anteriores.
Además, el control tiene capacidad para mostrar hasta 12 meses a la vez. Esto puede ser útil cuando se desea proporcionar a los usuarios la posibilidad de ver información relativa a una fecha de calendario determinada.
Control MonthView
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Posibles aplicaciones
Establecer y devolver fechas
La propiedad Value determina la fecha actualmente seleccionada en el control. Puede establecer la propiedad Value del control antes de mostrarlo (por ejemplo, en el evento Load del formulario) con el fin de determinar qué fecha debe estar inicialmente seleccionada en el control:
MonthView1.Value = "10/31/97"
De forma predeterminada, el valor de la propiedad Value del control corresponde a la fecha actual, la cual está seleccionada cuando el control aparece por primera vez. Si cambia su propiedad Value mediante código, el control MonthView se actualiza automáticamente para reflejar el nuevo valor.
Es posible usar ciertos eventos del control también para devolver valores de fecha. Por ejemplo, el evento DateClick se genera cada vez que el usuario hace clic en una fecha en el control. El evento DateClick devuelve un valor DateClicked que devuelve la fecha en la que el usuario hizo clic. De forma similar, el evento DateDblClick devuelve un valor DateDblClicked que indica en qué fecha se hizo doble clic y se provocó el evento. Al usar estos eventos, conviene hacer referencia al valor devuelto por los eventos en lugar de la propiedad Value del control, ya que ésta no se actualiza hasta después de que el evento ocurra.
La propiedad Value devuelve un valor de fecha al que puede aplicar cualquier formato que desee. El control MonthView también posee numerosas propiedades que devuelven información de fecha específica. La propiedad Month devuelve el valor entero (1-12) del mes que contiene la fecha seleccionada actual. La propiedad Day devuelve el numero del día (1-31) seleccionado actual y la propiedad DayOfWeek devuelve un valor que indica el día de la semana en que cae la fecha seleccionada (los valores corresponden a los de las constantes vbDayOfWeek). La propiedad Year devuelve el año que contiene la fecha seleccionada actual como un valor entero. Por fin, existe una propiedad Week que devolverá el número de la semana en que cae la fecha seleccionada.
Es posible establecer (así como leer) estas propiedades en tiempo de ejecución con efectos variables sobre la fecha actual seleccionada. Por ejemplo, al cambiar el valor de la propiedad DayOfWeek se seleccionará la fecha que corresponde al mismo día de semana, dentro de la semana especificada. Esto cambiará el valor de la propiedad Day pero en función de cómo cae la semana, esto puede modificar a su vez el valor de la propiedad Month. Al cambiar el valor de la propiedad Year, esto seleccionará la fecha correspondiente al año especificado y podrá afectar el valor de DayOfWeek.
Conviene tomar precauciones especiales al cambiar el valor de la propiedad Week. Al establecer otra semana como semana actual, no se cambiará el valor de la propiedad DayOfWeek, pero afectará al de la propiedad Day y posiblemente los valores de las propiedades Week, Month y hasta Year. Por ejemplo, si el usuario seleccionó "Viernes" y el valor de la propiedad Week está establecido a 52 en un año que termina en "Miércoles", el valor de la propiedad Week se convertirá en 1 y los valores Month y Year también cambiarán. Los valores 1 y 52 de la semana se solapan normalmente.
Selección de un intervalo de fechas
Utilice el control MonthView para mostrar o permitir al usuario seleccionar un intervalo contiguo de fechas. Con el fin de extender la selección sobre más de una fecha, la propiedad MultiSelect debe tener el valor True. Puede controlar el número máximo de días que pueden seleccionarse al cambiar el valor de la propiedad MaxSelCount. De forma predeterminada, la selección máxima permitida es de siete días.
Las propiedades SelStart y SelEnd determinan los días seleccionados. Puede examinar los valores de estas propiedades para determinar el intervalo que el usuario seleccionó. Si sólo una fecha está seleccionada, los dos valores serán iguales. También puede establecer los valores de estas propiedades desde su código, lo que permite seleccionar un intervalo de fechas dentro del control. Al establecer las propiedades SelStart y SelEnd mediante código, debe respetar las reglas siguientes:
Por ejemplo, para seleccionar la semana que precede el Año nuevo mediante código, podría usar el siguiente:
MonthView1.Value = "31/31/97"
MonthView1.MaxSelCount = 7
MonthView1.SelStart = "25/12/97"
MonthView1.SelEnd = "31/12/97"
Aplicar formato a la apariencia del Control
El control MonthView permite personalizar su apariencia de muchas formas. Existen varios atributos de colores como MonthBackColor, TitleBackColor, TitleForeColor y TrailingForeColor que permiten crear patrones de color exclusivos para el control. Por ejemplo, TrailingForeColor determina el color de las fechas que preceden y siguen a uno o varios meses mostrados.
El valor de la fuente correspondiente al control determina el ancho y alto del control. Al usar fuentes grandes, el control puede aumentar de tamaño para alojar el aumento de tamaño de la fuente. Inversamente, puede establecer una fuente de tamaño más pequeña para reducir el control. El tamaño de fuente se establece a través de la propiedad Font.
Mostrar más de un mes
El control MonthView puede mostrar de uno a doce meses a la vez. Es posible especificar cuántos meses mostrará el control y cómo se organizarán dentro de él. Esto se consigue mediante las propiedades MonthRows y MonthColumns. Por ejemplo, si establece MonthRows a 2 y MonthColumns a 3, conseguiría mostrar un control MonthView con seis meses a la vez. Al hacer clic en los botones de fecha en la parte superior del control, éste se desplazaría hasta los seis meses siguientes o anteriores.
Los meses individuales están separados por una barra separadora. El tamaño de la separación depende del tamaño del control y de la configuración de pantalla, pero puede recuperar las dimensiones utilizadas mediante las propiedades SeparatorHeight y SeparatorWidth. También puede recuperar el tamaño de un calendario sencillo mediante las propiedades CalendarWidth y CalendarHeight. El uso conjunto de estas propiedades sirve para determinar cómo el tamaño del control cambiará al agregar otra fila u otra columna así como para ajustar de acuerdo con él el tamaño y la ubicación de otros controles.
Otros valores de formato
Puede determinar qué día de la semana aparecerá como el primero al cambiar el valor de la propiedad StartOfWeek. Puede elegir mostrar los números de semana al establecer la propiedad ShowWeekNumbers a True. Los números de semana aparecen en una columna separada a la izquierda del primer día de la semana. Es posible habilitar o deshabilitar la presentación de la fecha actual al pie del control mediante la propiedad ShowToday.
Formato de días específicos
Cualquier número de día en el control MonthView puede también tener establecida su propia fuente en negrita. Es posible aplicar esta capacidad para forzar gráficamente la atención sobre ciertas fechas (por ejemplo, festivos, vacaciones, etc.) o sólo para distinguir éstas de las fechas ordinarias. Es posible aplicar negrita a más de una fecha a la vez. La información de negrita no se conserva cuando se produce un desplazamiento entre meses, pero este comportamiento puede simularse mediante el evento GetDayBold.
El ejemplo siguiente pone todos los sábados en negrita, aunque se produzca un desplazamiento de la vista hacia otros meses:
Private Sub MonthView1_GetDayBold(ByVal StartDate As Date, ByVal Count As Integer, State() As Boolean)
Dim i As Integer
i = vbSunday
While i < Count
State(i - MonthView1.StartOfWeek) = True
i = i + 7
Wend
End Sub
Interfaz de teclado
Es posible controlar el control MonthView con el teclado. La tabla a continuación describe las distintas acciones que puede realizar con el control en tiempo de ejecución.
Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior
Exploración en el control MonthView
Además de los dos botones en la parte superior del control, el control MonthView dispone de otros métodos para establecer el mes, o los meses actualmente mostrados. Puede mostrar un mes determinado de cualquier año determinado.
Para seleccionar un mes en particular
El control mostrará el mes seleccionado dentro del año actual.
Para ir directamente a un año en particular
El control mostrará el mes actual correspondiente al año especificado.
Nota para la distribución El control UpDown forma parte de un grupo de controles ActiveX incluidos dentro del archivo COMCT232.ocx. Debe agregar el archivo COMCT232.ocx al proyecto para poder usar el control en su aplicación. Al distribuir su aplicación, instale el archivo COMCT232.ocx en el directorio System o System32 de Microsoft Windows del usuario. Para obtener más información acerca de cómo agregar un control ActiveX a un proyecto, vea el Manual del programador.
UpDown (Control)
El control UpDown tiene dos botones con flechas en los que el usuario puede hacer clic para incrementar o disminuir un valor, por ejemplo una posición de desplazamiento o el valor de un control asociado, denominado control auxiliar.
Sintaxis
UpDown
Comentarios
Para el usuario, el control UpDown y su control auxiliar parecen a menudo un control único. El control auxiliar puede ser cualquiera de los que pueden vincularse al control UpDown a través de la propiedad BuddyControl y normalmente muestra datos, como un control TextBox o CommandButton.
Nota Los controles ligeros sin ventana, como el control intrínseco de etiqueta, no pueden usarse como un control auxiliar.
Si establece la propiedad AutoBuddy, el control UpDown tomará automáticamente como control auxiliar el control anterior del orden de tabulación. Si no hay ningún control previo en el orden de tabulación, tomará el siguiente. Otra forma de establecer el control auxiliar es con la propiedad BuddyControl. En tiempo de diseño, cuando se establece la propiedad AutoBuddy o la propiedad BuddyControl, puede asociar automáticamente el control auxiliar al control UpDown si ajusta su tamaño y lo coloca junto a él. Puede colocar el control UpDown a la izquierda o a la derecha del control auxiliar mediante la propiedad Alignment.
Las propiedades Increment, Min, Max y Wrap especifican la forma
en que cambia la propiedad Value del control UpDown cuando el usuario hace clic
en los botones de dicho control. Por ejemplo, si los valores son múltiplos
de 10 y van de 20 a 80, puede establecer las propiedades Increment, Min y Max
a 10, 20 y 80, respectivamente. La propiedad Wrap permite que la propiedad Value
siga incrementándose después de superar el valor de la propiedad
Max y que comience de nuevo por el valor de Min o viceversa.
Un control UpDown sin control auxiliar se comporta en cierto modo como una barra de desplazamiento simplificada.
Nota El control UpDown debe usarse en lugar del control SpinButton de Visual Basic 4.0.
Nota para la distribución El control UpDown forma parte de un grupo de controles ActiveX que se encuentran en el archivo MSCOMCT2.OCX. Para usarlo en una aplicación, debe agregar el archivo MSCOMCT2.OCX al proyecto. Al distribuir la aplicación, instale el archivo MSCOMCT2.OCX en el directorio SYSTEM de Microsoft Windows del usuario. Si desea más información acerca de cómo agregar un control personalizado a un proyecto, vea el Manual del programador.
Usar el control UpDown
Un control UpDown consta de una pareja de botones con flechas en los que el usuario puede hacer clic para aumentar o disminuir un valor, como una posición de desplazamiento o un número que aparezca en un control relacionado. El control relacionado puede ser de cualquier tipo, siempre y cuando tenga alguna propiedad que el control UpDown pueda actualizar.
A menudo, al usuario le parecerá que el control UpDown y su control relacionado son un único control. Puede especificar que un control UpDown se coloque automáticamente junto al control relacionado y que establezca éste en su valor actual. Por ejemplo, puede usar un control UpDown con un control TextBox para solicitar al usuario una entrada numérica. En la ilustración siguiente se muestra un control UpDown con un control TextBox como su control relacionado, una combinación que en ocasiones se denomina control Spinner.
Aplicaciones posibles
Funcionamiento básico
Para poder usar un control UpDown, primero debe establecer la propiedad BuddyControl en otro control y la propiedad BuddyProperty en una propiedad desplazable de ese otro control. Las propiedades Min y Max determinan los límites del control y la propiedad Wrap determina si el valor se ajustará cuando el usuario final sobrepase los valores indicados en Min o Max. La propiedad Increment especifica la cantidad en que la propiedad Value variará al hacer clic en la flecha hacia arriba o hacia abajo.
Usar la propiedad AutoBuddy para establecer automáticamente el control relacionado
En tiempo de diseño, si establece la propiedad AutoBuddy en True, el control UpDown adquiere automáticamente los valores numéricos del control anterior en el orden de tabulación.
Para establecer automáticamente un control relacionado
Figura 2.43 Ficha Relaciones de las páginas de propiedades del control UpDown
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Determinar el comportamiento de desplazamiento
El control UpDown incluye varios eventos y propiedades que permiten determinar cómo se desplaza el control.
Las propiedades Increment y Wrap
La propiedad Wrap determina el comportamiento del control cuando el usuario final mantiene presionado el botón de flecha hacia arriba o el de flecha hacia abajo. Si tiene el valor False, al alcanzarse el valor de Max o Min el control deja de desplazarse y se detiene en el valor de Max o Min. Si tiene el valor True, el control devolverá el valor de Min o de Max, y continuará aumentando (o disminuyendo) en los valores determinados por estas dos propiedades.
La propiedad Increment especifica la cantidad en que variará la propiedad Value cuando se haga clic en la flecha hacia arriba o en la flecha hacia abajo. Este valor no puede ser negativo. Un uso posible de esta propiedad es alternar un campo o un control OptionButton entre True (-1) y False (0), como en el código siguiente:
Private Sub Form_Load()
' El control UpDown se denomina "updToggle".
' El control OptionButton se denomina "optToggle".
With updToggle
.BuddyControl = optToggle
.Min = -1
.Max = 0
.Increment = 1
.Wrap = True
End With
End Sub
' Cambia la propiedad Value del control OptionButton
' con la propiedad Value del control UpDown.
Private Sub updToggle_Change()
optToggle.Value = updToggle.Value
End Sub
Los eventos UpClick y DownClick
Con los eventos UpClick y DownClick puede controlar exactamente cómo se desplaza el control UpDown por un intervalo de valores. Por ejemplo, si desea permitir que el usuario final se desplace rápidamente hacia arriba por los valores, pero más despacio cuando vaya hacia abajo, puede restablecer la propiedad Increment con valores distintos, como en el código siguiente:
Private Sub updScroll_UpClick()
' El control UpDown se llama "updScroll".
updScroll.Increment = 5
End Sub
Private Sub updScroll_DownClick()
' Cuando el usuario hace clic en la flecha hacia
' abajo, el incremento cambia a 1 para una mayor
' resolución.
updScroll.Increment = 1
End Sub
Enciclopedia de Informática y Computación
Biblioteca de Consulta Microsoft Encarta 2004
Enciclopedia de Computación y Tecnología
Francisco Javier Ayala Martinez
Edad: 18 Años
Ingrese el e-mail y contraseña con el que está registrado en Monografias.com
Trabajos relacionados
Ver mas trabajos de Programacion |
|
Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.
Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.