Cómo generar interfaces gráficos dinámicamente

Posted on viernes, enero 14, 2011 by Pedro Wave

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 co-autor 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.

Licencia de Creative Commons
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

Dime si te gusta lo que lees y, si no te gusta, dime por qué. Tengo habilitada la moderación de comentarios. Tu comentario se publicará pronto.

Tell me if you like what you read here and if you don't like, tell me why. I've enabled comment moderation. Your comment will be published ASAP.

Mi Lista de Blogs- My Blog List