Página 1 de 1

Ayuda con check box

Publicado: 22 Jul 2011, 07:32
por Lycanv69
Hola a todos, este es mi primer post y tambien mi primer aplicacion grafica con autoit, el problema que tengo es con un check box que cuando es marcado debe mostrar unas opciones mediante radios pero estos parpadean al ser mostrado en la ventana, ya lei Parpadeo en los botones pero ahi no dan una solucion explicita de como quitarlo solo leo una posible solucion dada por sahsanu y despues el codigo que muestra adrianodj es para realizar otra funcion por lo tanto no veo una solucion en ese post. Tambien lei el post ejecutar 2 programas cuando se pulsa el boton aceptar y veo que hacen uso de un archo .ini, pero a mi me gustaria que esas instrucciones las leyera directamente del script en ejecucion, pero probare con esta opcion para ver si me queda.

El codigo que utilizo para la interfaz y las acciones de los botones es el siguiente:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>

GUICreate("", 200, 150, 50, 100)
GUISetState(@SW_SHOW)
$check = GUICtrlCreateCheckbox("Prueba", 10, 10, 70, 20)
$radio1 = GUICtrlCreateRadio("Prueba", 10, 40, 50, 10)
$radio2 = GUICtrlCreateRadio("Prueba2", 10, 70, 70, 10)

While 1
	If GUICtrlRead($check) = $GUI_CHECKED Then
		GUICtrlSetState($radio1, $gui_show)
		GUICtrlSetState($radio2, $gui_show)
	Else
		GUICtrlSetState($radio1, $gui_hide)
		GUICtrlSetState($radio2, $gui_hide)
	EndIf
$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
	EndSelect
WEnd
Si pudieran orientarme sobre como evitar el parpadeo se los agradeceria mucho y claro luego compartiria el programa final, de antemano muchas gracias.

Re: Ayuda con check box

Publicado: 22 Jul 2011, 08:08
por avechuche
Yo uso este metodo

Código: Seleccionar todo

While 1

$msg = GUIGetMsg()
   Select

      Case $check ; Esto es para que solo haga lo que sigue si haces clic en el check con el WHILE siempre lo hace ...

      If GUICtrlRead($check) = $GUI_CHECKED Then
         GUICtrlSetState($radio1, $gui_show)
         GUICtrlSetState($radio2, $gui_show)
      Else
         GUICtrlSetState($radio1, $gui_hide)
         GUICtrlSetState($radio2, $gui_hide)
      EndIf

      Case $msg = $GUI_EVENT_CLOSE
         Exit
   EndSelect
WEnd

Re: Ayuda con check box

Publicado: 23 Jul 2011, 20:09
por Lycanv69
Bueno, pues buscando un poco en el foro en ingles, encontre la solucion a mi problema, intente con el codigo que me dio avechuche pero los radio's seguian mostrandose intermitentes, por lo que te agradezco avechuche pero no se resolvio el problema, la solucion la encontre en la siguiente direccion:

http://www.autoitscript.com/forum/topic ... ntry894951

Cuando termine el instalador lo compartire con ustedes, gracias.

Re: Ayuda con check box

Publicado: 23 Jul 2011, 22:02
por avechuche
Que extraño, estoy con un script que tengo lo mismo y lo tengo asi y funciona :) ... mejor que allas podido solucionarlo.

Re: Ayuda con check box

Publicado: 25 Jul 2011, 08:58
por Ximorro
Te parpadea porque lo estás haciendo continuamente en el bucle. La idea de avechuche es actualizar sólo cuando se clique un checkbox.
Así no debe parpadear, el problema es que no ha puesto bien la condición del Select, se le ha olvidado comparar con $msg, tal como hace con $GUI_EVENT_CLOSE:

Si cambias
Case $check
por
Case $msg = $check
ya no parpadeará.

Yo prefiero usar Switch en vez de Select, para estos casos es mejor (las condiciones siempre se refieren a una variable, en este caso $msg). Así queda un poco más compacto y no hay que acordarse de poner cada vez el "$msg ="
Así la estructura:

Código: Seleccionar todo

$msg = GUIGetMsg()
Select
  Case $msg = $check
  Case $msg = $GUI_EVENT_CLOSE
EndSelect
queda

Código: Seleccionar todo

$msg = GUIGetMsg()
Switch $msg
  Case $check
  Case $GUI_EVENT_CLOSE
EndSwitch
Y en realidad si $msg sólo lo usas para las comparaciones, lo que suele ser lo habitual, yo generalmente hasta me ahorro la variable:

Código: Seleccionar todo

Switch GUIGetMsg()
  Case $check
  Case $GUI_EVENT_CLOSE
EndSwitch
Y por favor, atención a la comprobación de los checkbox, no lo estáis haciendo de la manera correcta y aunque puede que normalmente vaya bien así algún día no irá y no sabréis por qué. Más info aquí:
http://www.emesn.com/autoitforum/viewto ... 845#p10845