Página 1 de 1

CheckBox transparente

Publicado: 24 Nov 2010, 08:22
por avechuche
Hola que tal gente, vengo con una duda que no la pude resolver buscando en google. Resulta que tengo un gui con una imagen de fondo con el comando GUICtrlSetState(-1, $GUI_DISABLE) para "anular" la foto y poder trabajar con los label, checkbox y demas, el tema es que ahora quiero poner los check transparentes, los label se puede, pero los check no ..

GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

Con eso soluciono lo de los labels. Sgun la ayuda tmb seriviria para los check pero no anda, hay algo que no estoy leyendo? Gracias!

Re: CheckBox transparente

Publicado: 24 Nov 2010, 08:38
por avechuche
Se me prendio la lamparita :)

solucione, pero es medio engorroso, doble trabajo por cada ckeckbox.

Que hice?

Cree un checkbox sin texto, asi:

GUICtrlCreateCheckbox("", 10, 10, 13, 13)

esos "13" serian el tamaño que ocupa el cuadradito blanco

Después cree un label y lo puse al lado de ese checkbox y lo hice transparente...

no es muy comodo, pero por ahora lo unico que hay :(

Re: CheckBox transparente

Publicado: 24 Nov 2010, 09:55
por Ximorro
Bien trabajado, te iba a proponer esa solución.

Para mí que hay un bug en AutoIt porque leí por algún sitio que $GUI_BKCOLOR_TRANSPARENT valía para otros controles además de los label, pero ahora no lo encuentro.

He probado otras opciones, por ejemplo hacer checkboxes a partir de botones (porque resulta que un checkbox es un tipo especial de botón) a base de toquitear los estilos, pero el resultado es igual o peor...

Además, aún es más raro porque si intentas cambiar el color del texto del checkbox con GUICtrlSetColor... ¡sorpresa! sólo cambia el recuadro de puntitos que marca el texto ¡no el texto! Y además de una manera extraña, no pone el color que le pongo sino que parece que hace alguna operación con el de fondo porque el resultado varía si cambio esto último. En los botones normales sí funciona bien...

Conclusión, tu solución es la mejor, además así podrás cambiar el color del texto del label, en el checkbox no he encontrado manera...

Para hacerlo menos engorroso puedes hacerte una función que haga el checkbox, algo así como

Código: Seleccionar todo

Func _miCreateCheckboxTrans(<mismos parámetros que para GUICtrlCreateCheckbox>)
  Local $chk =  GUICtrlCreateCheckbox(...)
  GUICtrlCreateLabel(...)
  GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
  ;También se podría poner el color del texto con GUICtrlSetColor, para eso habría que añadir el color a los parámetros de la función
  Return $chk 
EndFunc
Así los creas en una línea, luego para manipularlos ten en cuenta que lo que tienes es la cajita, no el label, para acceder al label o la función devuelve un array con los dos controles, o los asocias de alguna manera, o te creas funciones que manejen totalmente este tipo de "control compuesto". Pero normalmente no habrá que complicarse la vida, la función se usará simplemente para hacer más fácil la creación del control y luego te olvidas.

Re: CheckBox transparente

Publicado: 27 Nov 2010, 18:34
por Chefito
Mmmmm...la verdad es que cuando se intenta hacer un fondo transparente de un control, el estilo $GUI_BKCOLOR_TRANSPARENT empieza a fallar si no lo haces de una forma determinada. Ya me pasó hace tiempo con un código que colgé con labels transparentes.....que por cierto, no he encontrado (otro código mío que habrá desaprecido del foro????? :smt012 . O yo que no sabré buscar??? :smt005 ).
Bueno, para que funcione bien teneis que crear el control, en este caso un checkbox, antes que el pic. También teneis que ponerle el estilo extendido $WS_EX_TRANSPARENT al control para que no se oculte. Con esto debe ir bien. A mi en xp me va bien.
Pongo un ejemplo solamente de la parte que interesa. Adaptarlo vosotros con vuestro código e imagenes.

Código: Seleccionar todo

$gui= GUICreate("My GUI Checkbox")
$check = GUICtrlCreateCheckbox("CHECKBOX 1", 10, 10, 120, 20,-1,$WS_EX_TRANSPARENT)
GUICtrlSetBkColor($check, $GUI_BKCOLOR_TRANSPARENT)
$n = GUICtrlCreatePic(@ScriptDir &"\imagen.jpg", 0, 0, 200, 200)
GUISetState()
Saludos.

PD: He probado esto en win7 y no funciona :smt009 . Si se quisiera que funcionase en cualquier sitio se tendría que hacer de otra forma. Se me ocurre algunas ideas.
Puede que intente sustituir un color raro de fondo del control por los píxeles que hay justo debajo de la foto. Se recorrería todos los píxeles del control, y si coinciden con el color raro pues lo sustituye por el que le caíga justamente debajo. No se si funcionaría :smt017 .
Pero seguro que hay alguna otra forma de hacerlo transparente.

Saludos.