Ahora puede eliminar el código para la creación de losetas circulares e invocar la subrutina DrawShape para que dibuje la forma apropiada.
Para añadir gestores de eventos para el cuadro de diálogo
- Abrir el código para gpDialog.
- Escriba el siguiente código en la parte superior de la ventana:
Private Sub gp_poly_Click()
gp_tsides.Enabled = True
ThisDrawing.tshape = "Polígono"
End Sub
Private Sub gp_circ_Click()
gp_tsides.Enabled = False
ThisDrawing.tshape = "Círculo"
End Sub
Observe que las subrutinas gp_poly_Click() y gp_circ_Click() tienen el mismo nombre que los dos controles de opción añadidos anteriormente, con la adición de _Click. Estas subrutinas se ejecutan automáticamente cuando el usuario pulsa en el control respectivo. Observe también que el cuadro Objeto muestra los controles del formulario, ordenados alfabéticamente por la propiedad "Name" (nombre).
- Sitúe el cursor sobre la línea Private Sub gp_poly_Click() y abra el cuadro Procedimiento/Evento.
Podrá ver una lista de todos los eventos a los que puede responder para el control de opción gp_poly. Las dos subrutinas que ha escrito gestionan el evento Click. También puede añadir código para responder al evento DblClick, que se ejecutará automáticamente cuando el usuario haga doble clic en el control. Puede añadir código para cualquiera de los eventos de la lista. Estos tipos de subrutinas se denominan gestores de eventos.
Observe el código que ha escrito para estos dos gestores de eventos. El primer gestor de eventos responde al evento Click que corresponde al control de opción gp_poly. La primera línea de código activa el cuadro de texto para el número de lados. Este cuadro de texto sólo está disponible para polígonos, por lo que no está activado a no ser que seleccione el control Polígono. La siguiente línea de código establece la variable tshape como Polígono.
El segundo gestor de eventos responde al evento Click para el control de opción gp_circ . Este gestor desactiva el cuadro de texto para número de lados y establece la variable tshape en Círculo.
- Añada el siguiente gestor de eventos para el botón Aceptar:
Private Sub accept_Click()
If ThisDrawing.tshape = "Polígono" Then
ThisDrawing.tsides = CInt(gp_tsides.text)
If (ThisDrawing.tsides < 3#) Or _
(ThisDrawing.tsides > 1024#) Then
MsgBox "Escriba un valor entre 3 y " & _
"1024 para el número de lados."
Exit Sub
End If
End If
ThisDrawing.trad = CDbl(gp_trad.text)
ThisDrawing.tspac = CDbl(gp_tspac.text)
If ThisDrawing.trad < 0# Then
MsgBox "Escriba un valor positivo para el radio."
Exit Sub
End If
If (ThisDrawing.tspac < 0#) Then
MsgBox "Escriba un valor positivo para el espaciado."
Exit Sub
End If
GPDialog.Hide
End Sub
Este código comprueba si la elección final de la forma ha sido la de polígono. Si es así, el código obtiene el número de lados del control gp_tsides. El valor que introduce el usuario se almacena en la propiedad Text. Puesto que se almacena como cadena de texto, la cadena debe convertirse al entero equivalente utilizando la función CInt. Una vez obtenido, el gestor de eventos comprueba el rango del valor para asegurar que se encuentra entre 3 y 1024. Si no es así, se muestra un mensaje y se sale del gestor de eventos sin que tenga lugar ningún otro proceso. El resultado es que aparece un mensaje y que el usuario tiene otra oportunidad para cambiar el valor. Después de pulsar de nuevo el botón Aceptar, este gestor de eventos se ejecuta y vuelve a comprobar el valor.
La macro obtiene valores de radio y de espacio, pero estos valores son dobles, no enteros, y se obtienen utilizando la función CDbl. Estos valores también se verifican para comprobar que son positivos.
Una vez obtenidos y verificados los valores, la instrucción gpDialog.Hide oculta el formulario, devolviendo el control a la subrutina que invocó el formulario por primera vez.
- Añada el siguiente gestor de eventos para el botón Cancelar:
Private Sub cancel_Click()
Unload Me
Final
End Sub
Este sencillo gestor de eventos descarga el formulario y completa la macro.
Lo único que todavía no ha hecho es añadir los valores iniciales para el formulario. Hay un evento llamado Initialize que se aplica al formulario. Se ejecuta cuando se carga el formulario por primera vez.
- Añada el siguiente gestor de eventos para la inicialización de formularios:
Private Sub UserForm_Initialize()
gp_circ.Value = True
gp_trad.Text = ".2"
gp_tspac.Text = ".1"
gp_tsides.Text = "5"
gp_tsides.Enabled = False
ThisDrawing.tsides = 5
End Sub
Este código establece los valores iniciales del formulario y para la variable tsides. La tsides debe establecerse en un número positivo mayor que 3, aunque el usuario seleccione un círculo. Para comprender esto, fíjese en la subrutina DrawShape que ha escrito anteriormente. Hay una variable llamada points que se define utilizando el número de lados del polígono. Tanto si se solicita una forma de polígono como si no, se asigna memoria a la variable. Por este motivo, tsides debe estar dentro de un rango válido. El usuario puede cambiar este valor durante la ejecución de la macro.