Agregando funciones

Cuando lanzé la primera versión del juego, hecha en visual basic 6 ,allá por el 2006 , tuve algunas respuestas interesantes. Entre ellas las de un amable desconocido que me sugería la posibilidad de detener la cuenta regresiva del tiempo, ya que, según sus propias palabras, ” a pesar de saber mucho de cine,  el tiempo acotado me pone muy nervioso y no me sale una”. Esto es retrolimentación o “feedback”, y es una de las cosas que ayudan a mejorar el software.

Al haber sido desarrollado con soft propietario, si bien se distribuía como freeware, el usuario no podía “meter mano” en el código. La grandes ventajas de la licencia pública general es que el usuario puede modificar el programa a su gusto, y si este amable señor , quiere detener el tiempo de juego y jugar tranquilo,sería tan sencillo como hacer lo siguiente:

timer1.enabled=False

Nosotros vamos a crear un procedimiento que detenga el timer, le dé el foco a txtletra y deje el botón de detener el tiempo inhabilitado. Este es su código y se lo asignamos al evento click del btnparar

PUBLIC SUB Btnparar_Click()

Timer1.enabled = FALSE
txtletra.SetFocus
Btnparar.enabled = FALSE

END

Sencilo,¿verdad?

Ahora viene una funcionalidad básica pero que me trajo de los pelos y me dió un gran trabajo solucionar: reiniciar el juego.

Recordamos que en Form_Open del frmjugar se cargaban las películas y se inicializaban las variables, entre ellas la peli elegida. Se me ocurrió poner el evento Form_Open en el código del botón nuevo juego. ¿Qué pasaba? No me borraba los textbox ni los label anteriores, con lo que las letras se mezcablan de manera extraña, y si pulsaba el botón varias veces llegaba a tener mas espacios vacíos (textbox azules) que con letras o invisibles.

luego probé con

ME.close

Me.show

Recordemos que Me. hace referencia al form , o sea, a sí mismo. Pero claro, luego de cerrado ya no puede ejecutar código y el .show nunca se ejecutaba.
Podía cerrarlo desde el botón correspondiente y recargarlo desde el formulario principal, pero resultaba poco profesional hasta para este amable aficionado.
Lo googleé, consulté en los foros , pero no encontraba solución. Se me ocurrió una: creé un formulario llamado frmreinicio en cuyo evento Open coloqué el siguiente código:

frmjugar.show
ME.close

Y en el btnnuevo de frmjugar este otro:

frmreinicio.show
Me.close

Y saben algo…¡Funcionaba a las mil maravilas! Y era tán rápido que el otro form era apenas un parpadeo. Pero aún no me sentía satisfecho.
Tenía que haber una forma mejor de hacerlo.
Usar una interfase gráfica con el solo fin de reiniciar otra me parecía un despropósito. Y probando, probando , encontré una solución mejor.
Creé un módulo. Hagamóslo.
Vamos al árbol de la izquierda, botón derecho sobre módulo, nuevo, módulo.

Le damos un nombre, en este caso modreinicio y pulsamos aceptar.

Y este es su código.

‘ Gambas module file

PUBLIC SUB reiniciar()

frmjugar.Close
frmjugar.show

END
PUBLIC SUB reinicio()

Frmcompetir.Close
Frmcompetir.show

END

Por último, modificamos el código de btnnuevo_click

PUBLIC SUB Btnnuevo_Click()

Modreinicio.reiniciar

Aquí vemos como llamamos al procedimiento reiniciar anteponiendo a este el nombre del módulo donde está ubicado. Como podemos ver los módulos contienen código pero no tienen interfase gráfica.

El sub reinicio corresponde al formulario competir, que veremos en un próximo post.

Quizá puede parecer que este post para explicar dos cosas tan sencillas es excesivamente largo y se va por las ramas. Sin embargo, mi experiencia me enseña que conocer las dificultades enfrentadas y los caminos tomados para solucionarlas , enseña más que simplemente exponer la que termino siendo, a mi entender, la mejor solución. Por eso la disgresión. Saludos.

Anuncios
Esta entrada fue publicada en programación y etiquetada . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s