¿Vaya titulito para un post verdad? Puede que suene raro, pero son las 2:15 am y acabo de conseguir algo que a priori para un experto en la materia puede resultar relativamente sencillo, para un profano como yo ha supuesto un pequeño reto a lo largo del día de hoy.

Toco comenzó con un encargo de mi jefe para que le hiciese un montaje de video a modo de presentación para su ONG en Guinea Bissau (SOGUIBA), ya que inauguran este fin de semana una exposición de fotos en la que recogen donaciones o becas para que las niñas guineenses puedan seguir estudiando llegadas a determinada edad. Pero el encargo no quedaba ahí, ya que además quería (si era posible claro está) que apareciese en el video un contador dinámico en tiempo real que anunciase el número de becas que se iban pagando durante la exposición. Ese contador tendría que irse actualizando de la base de datos.

El montaje del video no me supuso ningún problema porque ya había hecho mis pinitos en edición de video (hasta tengo escrito, dirigido y montado un cortometraje qué cojones) pero lo del contador en tiempo real… vamos a ver, un video montado y editado es algo bastante estático, aunque en youtube ya comenzamos a ver lo que podría ser el inicio de la Web 3.0 con videos interactivos. Por lo tanto la única manera que se me ocurría de usar programación y multimedia a la vez era Flash. Quería hacer un programa que permitiese visionar el video y tuviese un contador en una esquina que atendiese a algún tipo de evento  y se fuese actualizando, pero al final he desechado esa idea y he optado por crear el contador en flash y ejecutar dicho contador y el video por separado aunque estén en el mismo monitor (el video ocupando toda la pantalla y el contador en una esquina).

La idea que me comentó mi jefe es que alguien se encargaría de ir actualizando una base de datos con los datos personales  de los donantes y la cantidad donada, y él quería que el contador leyese de alguna manera de dicha base de datos y se fuese actualizando en tiempo real. Bueno pues tras un par de llamadas para descubrir cuál era la base de datos resultó ser una simple hoja de excel (aunque no lo creáis sigue muchísima gente creyendo que eso es una base de datos), y aunque el problema en aparencia se simplificaba algo, seguía necesitando crear un programita en flash que leyese un campo contador de la hoja excel y se fuese actualizando periódicamente.

Ante mi desconocimiento de los lenguajes de programación ActionScript (para Flash) y Visual Basic (para las macros de Excel) tuve que investigar un poquito hasta dar con la solución (mi solución claro está): he creado un botón en la hoja excel para que la persona que rellene la hoja con los datos de los donantes lo vaya pulsando y ese botón incrementa la celda del contador por un lado, y a su vez me escribe el resultado del contador en un fichero de texto. El fichero se creará y guardará en C:\ (con el nombre contador.txt) para no haya problema de rutas erróneas al cambiar de equipo y contendrá la linea: contador=n, siendo n el número del contador.

Una vez que he exportado ese valor a un fichero de texto (un contenedor intermedio entre mis dos programas) el siguiente paso fue crear un programa en flash que leyese periódicamente (cada “x” milisegundos) el valor contenido en contador.txt y lo mostrase.

El código asignado al evento click del botón de la hoja Excel es el siguiente:

Private Sub IncContador_Click()
  x = Range("A1").Value
  x = x + 1
  Range("A1").Select
  ActiveCell.FormulaR1C1 = x
  texto = "contador="
  Open "c:\contador.txt" For Output As 1
  Print #1, texto, x
  Close #1
End Sub

Con Range nos situamso sobre una celda y con ActiveCell.FormulaR1C1 escribimos en ella. #1 hace referencia al fichero recién creado. Lo abrimos en modo escritura, escribimos la línea contador=x y lo cerramos.

El código en Flash es bastante sencillo. Sólo hay que crear en un escenario el tamaño que consideremos más oportuno dos cajas de texto, la primera estática que contenga un texto del tipo: “NÚMERO DE BECAS” (contador o lo que nos parezca mejor) y el siguiente dinámico. En OPCIONES podemos añadir un vínculo pero no es imprescindible (c:\contador.txt) y lo más importante, donde pone variable escribir contador (que es la variable que viene escrita en el fichero de texto (contador=n). Una vez hecho esto nos vamos a la ventana de Acciones (F9) que es donde podemos insertar nuestro código ActionScript y escribimos lo siguiente:

loadVariablesNum("c:\ccontador.txt",0);
function loop(){
     loadVariablesNum("c:\ccontador.txt",0);
 }
 setInterval(loop,5000);

Con este pequeño código podemos dejar ejecutándose nuestro contador flash, y cada 5 segundos leerá el archivo contador.txt para ver si ha cambiado su valor.