7 de marzo de 2010

La estructura "Boton"

Finalmente he decidido que el control será únicamente con el ratón, prescindiendo del teclado/botones. He creado una nueva estructura llamada Boton que contiene todas las variables y acciones que necesito para posicionar y controlar cada uno de ellos. Esta estructura está definida en el fichero main.gbas justo al inicio de todo el código, antes de dar valor a las variables globales.

 TYPE Boton  
   PosicionX  
   PosicionY  
   Ancho  
   Alto  
   Activado  
   Encima  
   Pulsado  
 ENDTYPE  

Cada variable se describe con el nombre de la misma, aún así paso brevemente a comentarlas. PosicionX y PosicionY almacenan la posición en pantalla del botón. Las variables Ancho y Alto contienen el tamaño que ocupa el botón en pantalla, lo que me permite saber si el ratón está dentro de la zona de pintado. Activado es 0 ó 1 dependiendo de si el botón está disponible para ser pulsado o no. Cuando el ratón está dentro de la zona del botón el valor de Encima se cambiará a 1, en caso contrario permanece siempre en 0. Finalmente Pulsado aloja como valor 1 cuando el botón se mantiene pulsado, momento en el cual el gráfico del botón está modificado para que el usuario se percate de su activación.

 GLOBAL Boton_Menu_A AS Boton  
 GLOBAL Boton_Menu_B AS Boton  

Posteriormente en el mismo fichero main.gbas, declaro dos nuevas variables que almacenarán los valores correspondientes a los dos primeros botones del menú principal de la aplicación. Una vez que ya tenemos los botones, dentro de Variables.gbas incluyo las líneas correspondientes a los datos de cada botón.

   Estado_Raton=0  
   Boton_Menu_A.PosicionX=2  
   Boton_Menu_A.PosicionY=42  
   Boton_Menu_A.Ancho=100  
   Boton_Menu_A.Alto=32  
   Boton_Menu_A.Activado=1  
   Boton_Menu_A.Encima=0  
   Boton_Menu_A.Pulsado=0  

   Boton_Menu_B.PosicionX=2  
   Boton_Menu_B.PosicionY=42+32  
   Boton_Menu_B.Ancho=100  
   Boton_Menu_B.Alto=32  
   Boton_Menu_B.Activado=1  
   Boton_Menu_B.Encima=0  
   Boton_Menu_B.Pulsado=0  

Nótese la varible global no comentada aún Estado_Raton, que se encarga de decirle a la aplicación en todo momento si se ha pulsado el ratón. Inicialmente, dado que aún no se ha pulsado ningún botón del ratón ésta vale 0. Cuando el usuario realiza un click el estado de la variable pasa a ser 1, entonces se ejecutan las rutinas de detectar en qué posición se ha pulsado el ratón y si algún botón de la pantalla se ve afectado.

 FUNCTION ControlRaton: Local_ModoMaquina  
   MOUSESTATE mx, my, b1, b2  
   IF b1=TRUE  
     Estado_Raton=1  
     Pos_Raton_X=mx  
     Pos_Raton_Y=my  
   ENDIF  
   IF b1=FALSE  
     IF Boton_Menu_A.Encima=1  
       ModoMaquina=1  
     ENDIF  
     IF Boton_Menu_B.Encima=1  
       ModoMaquina=2  
     ENDIF  
     Estado_Raton=0  
   ENDIF  
   IF Estado_Raton=1 AND Local_ModoMaquina=0  
     Boton_Menu_A.Encima=0  
     Boton_Menu_B.Encima=0  
     IF Pos_Raton_X >= Boton_Menu_A.PosicionX AND Pos_Raton_X <= Boton_Menu_A.PosicionX + Boton_Menu_A.Ancho AND Pos_Raton_Y >= Boton_Menu_A.PosicionY AND Pos_Raton_Y <= Boton_Menu_A.PosicionY + Boton_Menu_A.Alto  
       Boton_Menu_A.Encima=1  
     ENDIF   
     IF Pos_Raton_X >= Boton_Menu_B.PosicionX AND Pos_Raton_X <= Boton_Menu_B.PosicionX + Boton_Menu_B.Ancho AND Pos_Raton_Y >= Boton_Menu_B.PosicionY AND Pos_Raton_Y <= Boton_Menu_B.PosicionY + Boton_Menu_B.Alto  
       Boton_Menu_B.Encima=1  
     ENDIF   
   ENDIF  
 ENDFUNCTION  

El código fuente de la rutina de control de ratón pulsado, que aunque rudimentaria en su desarrollo resulta totalmente efectiva.

Aunque no lo he comentado y como es lógico, no puede haber una rutina de control de botones sinó tenemos ningún botón en pantalla. En la captura siguiente se pueden observar los gráficos correspondientes a los botones, cuyo diseño y empleo quiero dejar para un artículo futuro.



En la imagen se puede ver en la esquina superior derecha un 1, que corresponde al valor de la variable Estado_Raton como ya he comentado anteriormente. El gráfico correspondiente al botón OPCION A ha sido modificado aprovechando el valor de la variable Boton_Menu_A.Pulsado y Boton_Menu_A.Encima cuyos valores son 1.

No hay comentarios: