5.1.- BOTONES DE OPCIÓN, CUADROS DE VERIFICACIÓN, BARRAS DE DESPLAZAMIENTO.
CASILLAS DE VERIFICACIÓN Y CUADROS DE OPCIÓN.
Los botones de opción (Option Button, 3ª fila, icono central) y las casillas de verificación (CheckBox, 3ª fila, icono izquierdo), indican un estado y permiten al usuario que cambie el estado. Las casillas de verificación actúan independientemente. Por el contrario, los botones de opción aparecen en conjuntos y permiten escoger un valor del conjunto.
Las propiedades importantes de estos controles son, prácticamente las mismas que las de un botón de comando, a excepción de la propiedad Value (valor), que indica el estado del control. Para los botones de opción puede estar establecida a True o False. Si está a True, el botón estará activado. Para las casillas de verificación, se podrá establecer a 0-Unchecked (no está activado), 1-Checked (activado) o 2-Grayed (atenuado).
MARCOS
Los marcos (Frame, 2ª fila, icono central) sirven para separar grupos de otros objetos en la pantalla. Para los controles anteriores, también afectan al comportamiento de ellos. Para asegurarse que los controles que se añadan al marco pertenecen al marco, se deben crear dentro del marco y no arrastrarlos encima del marco.
BARRAS DE DESPLAZAMIENTO
(HScrollBar y VScrollBar, 4ª fila, iconos central y derecho) Informan de la posición del cuadro de desplazamiento dentro de la barra.
Las propiedades que se suelen utilizar son: Value (valor) contiene el número que representa la posición actual del cuadro de desplazamiento en el interior de la barra. LargeChange (gran cambio) representa el valor añadido o sustraído al número contenido en la propiedad Value cuando el usuario hace clic dentro de la barra de desplazamiento. Max (máximo) indica el valor de la propiedad Value cuando el cuadro de desplazamiento está en su posición más a la derecha o abajo posible. Min (mínimo) indica el valor de la propiedad Value cuando el cuadro de desplazamiento está en su posición más a la izquierda o arriba posible. SmallChange (cambio pequeño) representa el valor añadido o sustraído al número contenido en la propiedad Value cuando el usuario hace clic dentro de una de las flechas de desplazamiento.
Los eventos asociados a este tipo de control son los eventos Change producido después de que se haya modificado la posición del cuadro de desplazamiento; y el evento Scroll, emitido repetidamente mientras el cuadro de desplazamiento se arrastra por el interior de la barra de desplazamiento (no ocurre si se mueve haciendo clic en las flechas o en la barra). Se utiliza para proporcionar información instantánea.
TEMPORIZADORES
(Timer, 5ª fila, icono izquierdo) Este tipo de control se programa estableciendo su propiedad Interval al número de milisegundos que deben transcurrir entre los eventos que emita. En la mayoría de los ordenadores, un valor en la propiedad Interval inferior a 56 no es útil. El valor máximo permitido es algo más de un minuto: 66... Antes de generar un evento de reloj, el sistema siempre comprueba si hay algún otro evento de reloj pendiente, si lo hay, no genera un evento nuevo. Invisible en tiempo de ejecución.
CONTROL DE REJILLA (CONTROL GRID)
Una rejilla tiene la apariencia de una hoja de cálculo, por lo que la información que muestra aparece en las celdas de la rejilla. Durante la ejecución, el usuario podrá seleccionar celdas, pero no modificar su contenido. En una rejilla podemos tener celdas fijas y no fijas. El color por defecto de las celdas fijas es gris y, el de las no fijas, blanco. Si el número de celdas no cabe en la rejilla, aparecerán barras de desplazamiento. En Visual Basic 4.0, este control debe ser añadido al proyecto desde Herramientas/Controles Personalizados/ Activando "Microsoft Grid Control"
Las propiedades más importantes de este control son: Row (fila) determina la fila actual. Col (columna) contiene la columna actual. Rows (filas) determina el número total de filas. Cols (columnas) que determina el número total de columnas. FixedRows (filas fijas) determina el número de filas, empezando desde arriba, que permanecen fijas. FixedCols (columnas fijas) determina el número de columnas, empezando desde la izquierda, que permanecen fijas. ColWidth (anchura columna) determina el ancho de la columna. RowHeight (altura fila) determina el alto de la fila. Ambas están medidas en Twips. Text (texto) contiene el contenido de la celda.
EJERCICIOS:
5.2.- CUADROS DE DIÁLOGO COMUNES. CONTROLES DE UNIDADES, DIRECTORIOS Y ARCHIVOS
CUADROS DE DIÁLOGO
(Common Dialog, 8ª fila, icono izquierdo) Este control es invisible en tiempo de ejecución. Sin embargo, cuando se pone un control de este tipo en un formulario, se puede llamar a cualquiera de las cinco operaciones estándar de Windows como Abrir, Guardar como, Color, Fuente e Impresora. El cuadro de diálogo no realiza acciones, sólo recoge información. La ejecución de las funciones seleccionadas comienza cuando se establece la propiedad (Personalizado) del control de diálogo estándar. Las instrucciones de Visual Basic se suspenden hasta que el usuario sale del cuadro de diálogo. Entonces se podrán examinar las propiedades del control para ver qué acción se produjo. No hay ni métodos ni eventos asociados a este tipo de control. Todas las funciones del cuadro de diálogo permiten generar un error si el usuario selecciona el botón Cancelar. Para ello, se utiliza la propiedad CancelError (cancelar error), que por defecto está desactivada.
Al modificar la propiedad (Personalizado) aparece una serie de fichas para escoger el tipo de cuadro de diálogo que se debe mostrar. Las posibilidades son las siguientes:
Abrir / Guardar Como: Permite al usuario seleccionar una unidad de disco, un directorio, una extensión de archivo, un nombre de archivo e indicar si éste va a ser abierto sólo para lectura. Sus propiedades más importantes son: DialogTitle (título del cuadro de diálogo) que puede ser establecida en cualquier cadena de caracteres; FileName (nombre de archivo) utilizada para establecer el nombre inicial que aparecerá en el cuadro Nombre del archivo del cuadro de diálogo. Sirve además para saber el nombre del archivo seleccionado; Filter (filtro) se utiliza para restringir los nombres de los archivos que aparecerán en el cuadro de lista. Debe ser una cadena de texto con una o más parejas de componentes, donde cada componente está formada por una descripción y por un carácter comodín y, separadas por |; FilterIndex (filtro índice) tendrá como valor un número entero que indica la pareja de componentes del filtro que actuará por omisión; Flags (banderas) establecida como una combinación de uno o más valores que controlan características especiales del cuadro de diálogo.
Color: Permite al usuario seleccionar un color de una paleta o crear y seleccionar un color personalizado. La propiedad Color determina el color seleccionado.
Fuente: Permite al usuario seleccionar un tipo de letra, especificando la fuente, el estilo y el tamaño.
Imprimir: Visualiza el tipo de impresora que se está utilizando y permite al usuario especificar una nueva impresora y/o indicar cómo se va a realizar la impresión. Las propiedades Copies (número de copias), FromPage (desde la página nº), ToPage (hasta la página nº), determinan la información relativa a la impresión.
Ayuda: Permite ejecutar Winhelp.exe, pero no se visualiza cuadro de diálogo. La propiedad HelpCommand (comando de ayuda) especifica el tipo de ayuda que se quiere obtener; HelpFile (archivo de ayuda) especifica el nombre del archivo de ayuda y HelpKey (clave de ayuda) especifica la palabra clave que se debe usar para la pantalla inicial de ayuda.
Una vez en tiempo de ejecución, para visualizar el cuadro de diálogo se deberá utilizar uno de los métodos siguientes:
Método Tipo de Caja
ShowOpen Caja de diálogo Abrir
ShowSave Caja de diálogo Guardar Como
ShowColor Caja de diálogo Color
ShowFont Caja de diálogo Fuente
ShowPrinter Caja de diálogo Imprimir
ShowHelp Invoca a Winhelp.exe (no visualiza caja de diálogo)
EJEMPLO:
Diseñar una aplicación que permita visualizar varios tipos de cuadros de diálogo.
|
CONTROL |
PROPIEDAD |
VALOR |
|
Form |
Caption |
Cuadros de diálogo |
|
Name |
frmCDemo |
|
|
Appearance |
1 - 3D |
|
|
Label |
Caption |
Elige un tipo de cuadro |
|
List Box |
Font |
Font: Courier |
|
Name |
lstDiags |
|
|
Command Button |
Name |
cmdOK |
|
Caption |
OK |
|
|
Default |
True |
|
|
Command Button |
Caption |
Cancelar |
|
Name |
cmdCancelar |
|
|
Cancel |
True |
|
|
Common Dialog |
Name |
CommonDialog1 |
Private Sub Form_Load()
lstDiags.AddItem "Ningún cuadro de diálogo - Action = 0"
lstDiags.AddItem "Cuadro de diálogo Abrir - Action = 1"
lstDiags.AddItem "Cuadro de diálogo Guardar Como - Action = 2"
lstDiags.AddItem "Cuadro de diálogo Color - Action = 3"
lstDiags.AddItem "Cuadro de diálogo Fuentes - Action = 4"
lstDiags.AddItem "Cuadro de diálogo Imprimir - Action = 5"
lstDiags.AddItem "Cuadro de diálogo Ayuda - Action = 6"
End Sub
Private Sub cmdOK_Click()
MostrarCuadro
End Sub
Private Sub lstDiags_DblClick()
MostrarCuadro
End Sub
Private Sub cmdCancelar_Click()
Unload cmdCancelar.Parent
End Sub
Public Sub MostrarCuadro()
Dim Cual As Integer
Const OFNFileMustExists = 4096 ‘Constantes obtenidas del "Object Browser"
Const OFNAllowMultiselect = 512
Const OFNShowHelp = 16
Const OFNOverwritePrompt = 2
Const CCFullOpen = 2
Const CFBoth = 3
Const PPrintSetup = 64
Const HelpContents = 3
If lstDiags.ListIndex = 0 Or lstDiags.ListIndex = -1 Then
MsgBox "Lo siento, no hay cuadro de diálogo seleccionado"
Else
Cual = lstDiags.ListIndex
Select Case Cual
Case 1 ‘Abrir archivo, Action = 1
CommonDialog1.Flags = OFNFileMustExist Or OFNAllowMultiselect
CommonDialog1.ShowOpen
Case 2 ‘Guardar archivo, Action = 2
CommonDialog1.Flags = OFNShowHelp Or OFNOverwritePrompt
CommonDialog1.ShowOpen
Case 3 ‘Color, Action = 3
CommonDialog1.Flags = CCFullOpen
CommonDialog1.ShowOpen
Case 4 ‘Fuentes, Action = 4
CommonDialog1.Flags = CFBoth
CommonDialog1.ShowOpen
Case 5 ‘Imprimir, Action = 5
CommonDialog1.Flags = PDPrinterSetup
CommonDialog1.ShowOpen
Case 6 ‘Ayuda, Action = 6
CommonDialog1.HelpFile = "VB.HLP"
CommonDialog1.HelpCommand = HelpContents
CommonDialog1.ShowOpen
End Select
End If
End Sub
CONTROLES DE UNIDADES DE DISCO
(DriveList, 5ª fila, icono central) La propiedad Drive del control de unidades de disco, permite saber cuál es la unidad actual. Sólo el primer carácter es significativo. Disponible en tiempo de ejecución. Un cambio de unidad de disco provoca el suceso Change. Para que cambie la unidad de disco se debe ejecutar la sentencia:
ChDrive Drive1.Drive
CONTROL DE DIRECTORIOS
(DirList, 5ª fila, icono derecho) Muestra la estructura de directorios de la unidad actual. La propiedad Path devuelve el camino completo del directorio actual, incluyendo el nombre de unidad. Disponible en tiempo de ejecución. Un cambio de directorio provoca el suceso Change. Para que cambie el directorio se debe ejecutar la sentencia:
ChDir Dir1.Path
El directorio especificado por la propiedad Path siempre tiene como índice (propiedad ListIndex) -1. El que está inmediatamente encima de él, tiene como índice -2, y así sucesivamente hasta el directorio raíz. El primer subdirectorio que está inmediatamente a continuación, tiene como índice 0. Si hay varios directorios en el primer nivel de subdirectorios, el siguiente tiene índice 1, y así sucesivamente. El número de directorios correspondientes al primer nivel de subdirectorios del directorio especificado por Path, viene dado por la propiedad ListCount de la lista.
CONTROL DE ARCHIVOS
(FileList, 6ª fila, icono izquierdo) Muestra los archivos del directorio actual. La propiedad FileName permite especificar el fichero que se quiere utilizar o devuelve el nombre del fichero seleccionado. Disponible en tiempo de ejecución. La propiedad Pattern permite que se visualicen los ficheros que cumplen el patrón especificado por ésta. Admite los comodines * y ?. Los atributos están disponibles a través de las propiedades Archive, Normal, System, Hidden y ReadOnly. Para poner atributos a un fichero se ejecutará la propiedad SetAttr y, para obtenerlos, GetAttr. Las propiedades List y ListIndex son idénticas a las propiedades del mismo nombre de los cuadros combinados.
EJEMPLOS:
|
CONTROL |
PROPIEDAD |
VALOR |
|
Form |
Caption |
Buscar ficheros |
|
Name |
frmBuscarFicheros |
|
|
Label |
Caption |
Criterio de búsqueda: |
|
Text Box |
Text |
(ninguno) |
|
Name |
txtPatrón |
|
|
Command Button |
Name |
cmdDirectorio |
|
Caption |
Directorio: |
|
|
Text Box |
Caption |
(ninguno) |
|
Name |
txtDirectorio |
|
|
Command Button |
Caption |
Buscar |
|
Name |
cmdBuscar |
|
|
Default |
True |
|
|
Command Button |
Caption |
Cancelar |
|
Name |
cmdCancelar |
|
|
Command Button |
Caption |
Salir |
|
Name |
cmdSalir |
|
|
List |
Name |
lstLista |
|
Sorted |
True |
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Form_Load()
txtDirectorio.Text = CurDir$ ‘Directorio actual
txtPatrón.Text = "*.*"
End Sub
Private Sub txtPatrón_Change()
FrmSistemaF.fleArchivos.Pattern = txtPatrón.Text
End Sub
Private Sub cmdBuscar_Click()
BuscarFichero
End Sub
Private Sub cmdCancelar_Click()
NoAbandonarBuscar = False
End Sub
Private Sub cmdDirectorio_Click()
frmSistemaF.Show 1 ‘Formulario modal
End Sub
En un nuevo módulo:
Public NoAbandonarBuscar As Boolean
Dim NumFicheros As Integer
Public Sub BuscarFichero()
‘Inicialización para llamar a RecorrerArbolDirs para ejecutar una búsqueda recursiva
Dim Abandono As Boolean, I As Integer, Msj As String
‘Si ya existe una lista, borrarla
If frmBuscarFicheros.lstLista.ListCount Then FrmBuscarFicheros.lstLista.Clear
‘Comenzar la búsqueda recursiva de directorios
Abandono = RecorrerArbolDirs(frmBuscarFicheros.txtDirectorio.Text, "")
frmSistemaF.fleArchivos.Path = frmSistemaF.dirDirectorio.Path
If Not Abadono Then
If frmBuscarFicheros.lstLista.ListCount Then
NumFicheros = frmBuscar-ficheros.lstLista.ListCount
Msj = "Se encontraron " & Str$(NumFicheros)
Msj = Msj & " ficheros"
Else
Msj = "No se encontraron ficheros"
End If
MsgBox Msj, vbInformation, frmBuscarFicheros.Caption
Else
Msj = "Error: se abandonó la búsqueda"
MsgBox Msj, vbCritical, frmBuscarFicheros.Caption
End If
End Sub
Public Function RecorrerArbolDirs(DirActual As String, DirAnterior As String) _
As Boolean
‘Buscar directorios recursivamente desde DirActual hacia abajo
Dim vr As Integer, I As Integer, Msj As String
‘Permitir al usuario abandonar la búsqueda
NoAbandonarBuscar = True
‘Si ocurre un error, la función devuelve True
RecorrerArbolDirs = False
‘Permitir ejecutar otros sucesos
vr = DoEvents
‘Ahora Cancelar puede poner NoAbandonar a False
On Error GoTo ManipularErrorRecorrerArbolDirs
‘Directorios debajo del actual
DirsDebajo = frmSistemaF.dirDirectorio.ListCount
Do While (DirsDebajo > 0) And NoAbandonarBuscar
‘DirViejo se guarda en DirAnterior para la próxima recursión
DirViejo = DirActual
If frmSistemaF.dirDirectorio.ListCount > 0 Then ‘otro nodo
FrmSistemaF.dirDirectorio.Path = frmSistemaF!dirDirectorio.List(DirsDebajo - 1)
NoAbandonarBuscar = RecorrerArbolDirs((frmSistemaF!dirDirectorio.Path), _
DirViejo)
End If
‘Otra rama del mismo nivel de directorios
DirsDebajo = DirsDebajo - 1
If NoAbandonarBuscar = False Then
RecorrerArbolDirs = True
Exit Function
End If
Loop
‘Completar camino
If frmSistemaF.fleArchivos.ListCount Then
If Len(DirActual) > 3 Then DirActual = DirActual + "\"
‘Añadir ficheros a la lista
For I = 0 To frmSistemaF.fleArchivos.ListCount - 1
Entrada = DirActual & frmSistemaF.fleArchivos.List(I)
FrmBuscarFicheros.lstLista.AddItem Entrada
NumFicheros = NumFicheros + 1
Next I
End If
If DirAnterior <> "" Then ‘Directorio anterior en la lista
FrmSistemaF.dirDirectorio.Path = DirAnterior
End If
Exit Function
ManipularErrorRecorrerArbolDirs:
Ir Err = 7 Then ‘Insuficiente memoria (lista llena)
‘Visualizar mensaje de error y retornar True en AbandonarBusqueda
Msj = "Lista llena. Se abandona la búsqueda"
MsgBox Msj, vbExclamation
RecorrerArbolDirs = True
Exit Function ‘Exit pone Err a 0
Else
MsgBox Error, vbCritical
End
End If
End Function
En un nuevo formulario:
|
CONTROL |
PROPIEDAD |
VALOR |
|
Form |
Caption |
Sistema de Ficheros |
|
Name |
frmSistemaF |
|
|
Label |
Caption |
Ficheros: |
|
File |
Name |
FleArchivos |
|
Label |
Caption |
Directorios: |
|
Dir |
Name |
dirDirectorio |
|
Label |
Caption |
Unidades: |
|
Drive |
Name |
drvUnidades |
|
Command Button |
Caption |
Aceptar |
|
Name |
cmdAceptar |
|
|
Command Button |
Caption |
Cancelar |
|
Name |
cmdCancelar |
Private Sub drvUnidades_Change()
On Error GoTo Unidades
dirDirectorio.Path = drvUnidades.Drive
Exit Sub
Unidades:
MsgBox "Error: unidad no preparada", vbExclamation, "Sistema Ficheros"
Exit Sub
End Sub
Private Sub dirDirectorio_Change()
fleArchivos.Path = dirDirectorio.Path
End Sub
Private Sub cmdAceptar_Click()
‘Actualizar la lista de directorios
dirDirectorio.Path = dirDirectorio.List(dirDirecrorio.ListIndex))
frmBuscarFicheros.txtDirectorio.Text = dirDirectorio.Path
frmSistemaF.Hide
End Sub
Private Sub cmdCancelar_Click()
frmSistemaF.Hide
End Sub
|
CONTROL |
PROPIEDAD |
VALOR |
|
Form |
Caption |
Inventario de Farmacia |
|
Name |
frmInventario |
|
|
Text Box |
Text |
(ninguno) |
|
Name |
txtNombre |
|
|
Text Box |
Text |
(ninguno) |
|
Name |
txtCantidad |
|
|
Text Box |
Text |
(ninguno) |
|
Name |
txtComentarios |
|
|
MultiLine |
True |
|
|
ScrollBars |
2-Vertical |
|
|
Command Button |
Caption |
Buscar Producto |
|
Name |
cmdBuscar |
|
|
Command Button |
Caption |
Añadir |
|
Name |
cmdAñadir |
Private Sub cmdAñadir_Click()
TotalRegistros = TotalRegistros + 1
Articulo(TotalRegistros).Nombre = txtNombre.Text
Articulo(TotalRegistros).Cantidad = txtCantidad.Text
Articulo(TotalRegistros).Comentario = txtComentarios.Text
frmRegistros.lstNombre.AddItem txtNombre.Text
txtNombre.Text = ""
txtCantidad.Text = ""
txtComentarios.Text = ""
txtNombre.SetFocus
End Sub
Private Sub Form_Terminate()
End
End Sub
Private Sub cmdBuscar_Click()
frmRegistro.Show
End Sub
En un nuevo módulo:
Type Registro
Nombre As String * 50
Cantidad As String * 20
Comentarios As String * 200
End Type
Public TotalRegistros As Integer
Public Articulo(1 To 100) As Registro
Public Sub BuscarRegistro()
Dim QueRegistro As Integer
For QueRegistro = 1 To 100
If (RTrim(Articulo(QueRegistro).Nombre)) = _ RTrim(frmRegistro.lstNombre.Text Then Exit For
Next QueRegistro
frmInventario.txtNombre.Text = Articulo(QueRegistro).Nombre
frmInventario.txtCantidad.Text = Articulo(QueRegistro).Cantidad
frmInventario.txtComentarios.Text = Articulo(QueRegistro).Comentarios
frmRegistro.Hide
End Sub
En un nuevo formulario:
|
CONTROL |
PROPIEDAD |
VALOR |
|
Form |
Caption |
Buscar Producto |
|
Name |
frmRegistro |
|
|
Max Button |
False |
|
|
Min Button |
False |
|
|
BorderStyle |
1-Fixed Single |
|
|
List Box |
Sorted |
True |
|
Name |
lstNombre |
|
|
Command Button |
Caption |
Aceptar |
|
Name |
cmdAceptar |
|
|
Command Button |
Caption |
Cancelar |
|
Name |
cmdCancelar |
Private Sub cmdCancelar_Click()
frmRegistro.Hide
End Sub
Private Sub cmdAceptar_Click()
BuscarRegistro
End Sub
Private Sub lstNombre_DblClick()
BuscarRegistro
End Sub
EJERCICIO:
Crear una aplicación que permita al usuario escoger un tipo de letra y sus determinados atributos. El formulario debe parecerse lo más posible al mostrado por Visual Basic al cambiar la propiedad Font de cualquier control.
5.3.- CREACIÓN DE MENÚS.
DISEÑO DE UN MENÚ
Para diseñar un menú se utilizará Herramientas/Editor de Menús. Los elementos de un menú pueden ser órdenes o comandos, que al hacer clic sobre ellos ejecutan acciones; submenús, que despliegan una nueva lista de elementos y; separadores o línea horizontal que agrupa las opciones del menú. Una vez en la ventana de diseño de menús, se introducirán los siguientes datos:
Caption Nombre del menú que se desea crear (lo que ve el usuario). Se insertará un ampersand (&) delante de la letra que dará acceso al menú. Para introducir un separador, se escribirá un guión (-) en este apartado.
Name Nombre utilizado en el código para referirse al menú.
Index Permite que un conjunto de órdenes sean agrupadas en una matriz de controles.
ShortCut Permite definir un acelerador, es decir, una combinación de teclas para activar el elemento.
Checked Útil para indicar si una orden está activa o no. Si lo está, en la orden aparece una marca Ö a su izquierda.
Enabled Útil para desactivar una orden. Si una orden tiene esta propiedad marcada, aparecerá atenuada y no podrá ser ejecutada.
Visible Es útil cuando en tiempo de ejecución se quiere ocultar una orden.
WindowList Permite especificar si un menú mantiene una lista de las ventanas abiertas, con una marca Ö a la izquierda de la ventana activa.
HelpContexID Se utiliza para proveer una ayuda en línea para una aplicación.
NegotiatePosition Determina si el menú va a aparecer en el formulario y cómo lo hace.
Para introducir sangrías entre los elementos de menú, se pulsará los botones de flecha. El botón Next inserta un nuevo elemento de menú o, se desplaza al siguiente.
En tiempo de ejecución se podrán añadir órdenes a un menú. Para ello se utilizará la sentencia Load, tal como se utilizaba en matrices de controles. Para eliminar una orden de un menú, se utilizará Unload. Para poder utilizar estas dos sentencias, las órdenes que componen el menú tienen que pertenecer a una matriz de controles, por lo que durante el diseño se debe haber creado al menos, un elemento (haber puesto a un comando la propiedad Index a 0).
MENÚS DESPLEGABLES FLOTANTES O EMERGENTES
Para poder crear un menú emergente o contextual, se utilizará el método:
[formulario.] PopupMenu NombreMenú
donde NombreMenú es el valor de la propiedad Name del menú que se quiere mostrar. Ya se verá cómo hacer que aparezcan al pulsar el botón derecho del ratón.
EJEMPLO:
Modificar la aplicación que permitía simular un editor de texto.
|
CONTROL |
PROPIEDAD |
VALOR |
|
Form |
Caption |
Editor de Textos |
|
Name |
frmEditor |
|
|
Text Box |
Text |
(ninguno) |
|
MultiLine |
True |
|
|
ScrollBars |
3- Both |
|
|
Name |
txtEditor |
El menú a diseñar tiene el siguiente formato:
|
CAPTION |
NAME |
OTRAS |
|
&Archivo |
mnuArchivo |
|
&Salir |
mnuArchivoSalir |
ShortCut: CTRL+S |
|
&Edición |
mnuEdición |
|
&Cortar |
mnuEdiciónCortar |
ShortCut: CTRL+X Enabled: False |
C&opiar |
mnuEdiciónCopiar |
ShortCut: CTRL+C Enabled: False |
&Pegar |
mnuEdiciónPegar |
ShortCut: CTRL+V Enabled: False |
|
&Configuración |
mnuConfiguaración |
|
&Fuente |
mnuConfFuente |
|
Arial |
Fuente |
Checked: True Index: 0 |
Times New Roman |
Fuente |
Index: 1 |
&Tamaño |
mnuConfTamaño |
|
10 |
Tamaño |
Checked: True Index: 0 |
20 |
Tamaño |
Index: 1 |
&Color |
mnuConfColor |
|
Negro |
Color |
Checked: True Index: 0 |
Azul |
Color |
Index: 1 |
Rojo |
Color |
Index: 2 |
|
A&yuda |
mnuAyuda |
|
Acerca de ... |
mnuAyudaAcerca |
Dim SeñalColor As Integer
Dim SeñalFuente As Integer
Dim SeñalTamaño As Integer
Private Sub Form_Load()
Clipboard.Clear ‘Limpiar el portapapeles
txtEditor.Font.Name = "Arial"
SeñalFuente = 0
txtEditor.Font.Size = 10
SeñalTamaño= 10
txtEditor.ForeColor = RGB(0, 0, 0)
SeñalColor = 0
End Sub
Private Sub mnuArchivoSalir_Click()
End
End Sub
Private Sub mnuEdición_Click()
mnuEdiciónCopiar.Enabled = (txtEditor.SelLength > 0)
mnuEdiciónCortar.Enabled = (txtEditor.SelLength > 0)
‘Activar la opción Pegar si el portapapeles tiene algo
mnuEdiciónPegar.Enabled = (Len(Clipboard.GetText()) > 0)
End Sub
Private Sub mnuEdiciónCopiar_Click()
Clipboard.SetText txtEditor.SelText ‘Llevar al portapapeles
End Sub
Private Sub mnuEdiciónCortar_Click()
Clipboard.SetText txtEditor.SelText ‘Llevar al portapapeles
txtEditor.SelText = "" ‘Eliminar el texto
End Sub
Private Sub mnuEdiciónPegar_Click()
txtEditor.SelText = Clipboard.GetText()
End Sub
Private Sub Fuente_Click()
txtEditor.Font.Name = Fuente(Index).Caption
Fuente(SeñalFuente).Checked = False ‘Desactivar la fuente anterior
Fuente(Index).Checked = True ‘Activar la nueva fuente
SeñalFuente = Index
End Sub
Private Sub Tamaño_Click()
txtEditor.Font.Size = Val(Tamaño(Index).Caption
Tamaño(SeñalTamaño).Checked = False ‘Desactivar el tamaño anterior
Tamaño(Index).Checked = True ‘Activar el nuevo tamaño
SeñalTamaño = Index
End Sub
Private Sub Color_Click()
Select Case Index
Case 0
txtEditor.ForeColor = RGB(0, 0, 0)
Case 1
txtEditor.ForeColor = RGB(0, 0, 255)
Case 2
txtEditor.ForeColor = RGB(255, 0, 0)
End Select
Color(SeñalColor).Checked = False
Color(Index).Checked = True
SeñalColor = Index
End Sub
EJERCICIOS:
5.4.- CONTROL DE ACTIVIDAD DEL RATÓN, EVENTOS ASOCIADOS.
EVENTOS ASOCIADOS
Los formularios y varios tipos de controles reconocen tres sucesos porducidos por el ratón:
MouseDown. Reconocido cuando el usuario pulsa cualquier botón.
MouseUp. Reconocido cuando el usuario suelta cualquier botón.
MouseMove. Reconocido cada vez que el usuario mueve el cursor del ratón a una nueva posición.
Los procedimientos asociados a estos sucesos tienen los mismos argumentos: Button, botón pulsado; Shift, tecla/s pulsada/s; X e Y, coordenadas de la posición actual del ratón.
Objeto_SucesoRatón(Button As Integer, Shift As Integer, X As Single, Y As Single)
Los valores válidos para el argumento Button dependen del suceso. Para los sucesos MouseDown y MouseUp, este argumento puede tomar los siguientes valores:
CONSTANTE VALOR
vbLeftButton 1
vbRightButton 2
vbMiddleButton 4
Para el suceso MouseMove, este argumento puede tomar los siguientes valores:
CONSTANTE VALOR
vbLeftButton 1
vbRightButton 2
vbLeftButton + vbRightButton 3
vbMiddleButton 4
vbLeftButton + vbMiddleButton 5
vbMiddleButton + vbRightButton 6
vbLeftButton + vbRightButton + vbRightButton 7
Los valores válidos para el argumento Shift pueden ser:
CONSTANTE VALOR
vbShiftMask 1
vbCtrlMask 2
vbAltMask 4
EJEMPLOS:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, _
Y As Single)
txtTest1.Text = Str(X)
txtTest2.Text = Str(Y)
Select Case Button
Case 1
txtTest3.Text = "Botón Izquierdo"
Case 2
txtTest3.Text = "Botón Derecho"
Case 4
txtTest3.Text = "Botón Central"
End Select
End Sub
Dim PuntoX As Integer
Dim PuntoYAs Integer
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, _
Y As Single)
If Button = 1 Then ‘Botón izquierdo
PuntoX = X
PuntoY = Y
CurrentX = X
CurrentY = Y
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, _
Y As Single)
If Button = 1 Then Line -(X, Y) ‘Dibujar una línea
End Sub
ARRASTRAR Y SOLTAR
Para que un control pueda ser arrastrado, su propiedad DragMode debe estar establecida a 1. En este caso, este objeto ya no recibe más los eventos Click y MouseDown. En su lugar, el objeto se mueve cuando el usuario hace clic sobre él y comienza a arrastrarlo. Al mover un objeto, Visual Basic muestra un cuadro gris en lugar del objeto. Si se quiere sustituir por una imagen, se modificará la propiedad DragIcon del objeto a mover.
Cuando un objeto está siendo arrastrado, se denomina objeto fuente y, el objeto sobre el que se suelta, objeto destino. Este último objeto recibe el evento DragDrop. A todos los objetos por los que el objeto fuente haya pasado por encima durante el arrastre, se emitirá el evento DragOver.
Un objeto puede ser movido a petición del usuario. Para ello, la propiedad DragMode del objeto estará establecida a 0. Para permitir o no arrastrar el objeto, se utilizará el método:
[control.] Drag acción
donde acción puede tener el valor 0, 1 ó 2. Un valor 0 cancela la operación de arrastrar, un valor 1 inicia la operación de arrastrar, un valor 2 finaliza la operación de arrastrar y provoca el suceso DragDrop.