Continuando con el tema anterior, sobre un
Mapa de Zonas Horarias con relojes mundiales, servirá de ejemplo de cómo generar interfaces gráficos de usuario - GUI de
forma dinámica, o sea, cuando se necesiten y no antes.
Cuando me propuse crear un mapa mundial de relojes con las ciudades
geolocalizadas no pensé que el mayor problema sería subir el fichero al
foro de AyudaExcel, que está
limitado a archivos comprimidos de menos de 97.7 KBytes.
El fichero ocupaba unos 6 MBytes sin comprimir y más de 1 MByte comprimido,
por lo que era imposible subirlo al foro. Después de varias horas de trabajo
conseguí que ocupara sólo 78.4 KBytes, gracias a la generación dinámica de
todos los objetos, relojes, ciudades y el mapa mundial que se puede descargar
desde mi anterior artículo:
Mapa Mundial con relojes marcando las horas en Excel
Ahora comparto la nueva versión 2.0 que ocupa 168 KBytes, diseñada en Excel
2010 compatible con Excel 2007,y cuenta con tres nuevas características:
- Mapa Mundial con días y noches actualizado cada 15 minutos
- Traducciones al español y al inglés
- No aparecen estrellas
Como en la versión anterior, inicialmente cuenta con una forma de cada tipo
necesario para generar el mapa de ciudades y relojes. Las formas iniciales son
cinco:
- Mapa - Es una Imagen y está vacía al abrir el archivo.
-
Reloj0 - Es un gráfico con un reloj analógico más grande que los
demás y sólo hay uno.
-
RelojDigital - Es un TextBox con un reloj digital único que aparece
cuando se pincha en el mapa.
-
Reloj1 - Es un gráfico con el primero de los 34 relojes analógicos
con el que se clonarán los demás.
-
Ciudad1 - Es un botón de opción que representa la primera de las
ciudades, con el que se clonarán las demás.
Sin la generación dinámica del interface gráfico de usuario - IGU, la
aplicación tendría esta apariencia tan simple y con mínima usabilidad:
La rutina
Sub Workbook_Open() genera dinámicamente un GUI con los
siguientes procedimientos:
-
RellenaTiempos - En la hoja Tiempo sólo existen 4 filas y el resto
son copiadas hasta la fila 146.
-
CreaMapa(True) - Descarga de la Web el fichero con el mapa mundial
con las zonas diurnas y nocturnas.
-
CreaRelojes - Genera 33 relojes a partir del Reloj1 situándolos
alrededor del mapa.
-
CreaCiudades - Genera todas las ciudades de la hoja Relojes a
partir de la Ciudad1 y las geolocaliza en el mapa, según sus coordenadas
geográficas.
Hoja Mundo
El resultado final es un mapa mundial de tipo día-noche, descargado cada 15
minutos de la siguiente página web suiza:
www.fourmilab.ch, desarrollada y mantenida por
John Walker, fundador de Autodesk, Inc. y coautor del famoso programa
AutoCAD.
Se generan dinámicamente 34 relojes nombrados como Reloj1 a Reloj34 y al menos
34 ciudades nombradas como Ciudad1 a Ciudad34, como se muestra en la
figura:
Inicialmente cada una de las hojas contiene el mínimo número de filas para
poder generar dinámicamente el resto de las filas.
Hoja Tiempo
Contiene fórmulas en las filas 3 y 4 para obtener el ángulo de las manecillas
de los relojes analógicos. La macro
RellenaTiempos rellena 242 filas y
sólo pega los valores generados por las fórmulas para reducir el tiempo de
ejecución de las funciones seno y coseno.
Se ha simplificado el ángulo de visualización de la saeta de las horas para
que solo cambie cada 10 minutos y la saeta de los minutos para que cambie cada
15 segundos. Por supuesto que la saeta de los segundos cambia cada segundo.
Hoja Ciudades
La rutina
CreaCiudades copia la fila 3 hacia abajo para poder obtener
hasta 700 ciudades.
Hoja Relojes
La rutina
CreaRelojes copia la fila 4 hacia abajo para poder obtener la
información de los 32 relojes analógicos y sus correspondientes ciudades.
Agradecimientos
He de dar públicamente las gracias y reconocer el gran trabajo de:
George Lungu por escribir interesantísimos artículos en su blog
Excel Unusual
Este trabajo se ha inspirado en:
How to Make an Analog Clock in Excel
Chip Pearson para saber cómo:
Downloading a file from the Web
Time Zone and Daylight Time
Servicios Web
World Clock
www.timeanddate.com/worldclock/
Earth Viewer
www.fourmilab.ch/earthview/
GeoLookupXML
wiki.wunderground.com
Descarga la nueva versión desde aquí:
RelojesMundialesPW22.xlsm
ATENCIÓN: Este software no está diseñado con fines comerciales y se
cede bajo licencia
Copyleft "tal cual
es"
sin asumir el autor ninguna consecuencia debida al uso del mismo para otros
fines que no sean educativos.
RelojesMundialesPW20.xlsm
by
Pedro Wave is licensed under a
Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.
Based on a work at
cid-6b219f16da7128e3.office.live.com
Lo mejor es ver el código implementado y las hojas diseñadas para comprender
la generación dinámica de interfaces gráficos de usuario, pues el código no
está oculto ni protegido.
English translation of this post
here.
No Response to "Cómo generar interfaces gráficos dinámicamente"
Leave A Reply
Indícame las erratas que encuentres y qué es lo que te gustaría ver en los próximos artículos.