Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: E N T E R en Julio 18, 2011, 09:28:28 pm

Título: Control OptionButton Fondo Transparte
Publicado por: E N T E R en Julio 18, 2011, 09:28:28 pm
Hola amigos del foro, alguien sabe como puedo poner al control OptionButton fondo transparente.

Googleando encontré este pero no me sirve así:

http://www.vbforums.com/showthread.php?t=557108 (http://www.vbforums.com/showthread.php?t=557108)
Título: Re:Control OptionButton Fondo Transparte
Publicado por: coco en Julio 18, 2011, 10:19:41 pm
jajaja el post en planet source code es mio :P... y realmente no sirve si el ClearType esta activado, porque se caga fiero
Título: Re:Control OptionButton Fondo Transparte
Publicado por: E N T E R en Julio 18, 2011, 10:51:00 pm
 :'( Hay alguna forma de solucionar eso.
Título: Re:Control OptionButton Fondo Transparte
Publicado por: seba123neo en Julio 18, 2011, 11:38:46 pm
Hola, proba esto:

Código: [Seleccionar]
Option Explicit

Private Const RGN_XOR = 3
Private Const COLOR_BTNFACE = 15

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long

Private Sub OptionTransparente(aCtl As Control, trans As Boolean)

    Dim X As Long
    Dim Y As Long
    Dim wid As Long
    Dim hgt As Long
   
    Dim rgnCtl As Long
    Dim rgnPixel As Long
    Dim colPixel As Long
    Dim ctlDC As Long
    Dim backColor As Long
   
    backColor = GetSysColor(COLOR_BTNFACE)
   
    wid = aCtl.Width / Screen.TwipsPerPixelX
    hgt = aCtl.Height / Screen.TwipsPerPixelY
   
    rgnCtl = CreateRectRgn(0, 0, wid, hgt)
    If Not trans Then GoTo TransChkOpt_SetRgn
    aCtl.Refresh
    ctlDC = GetDC(aCtl.hwnd)
   
    For Y = 0 To hgt
        For X = 0 To wid
   
            colPixel = GetPixel(ctlDC, X, Y)
            If colPixel = backColor Then
   
            rgnPixel = CreateRectRgn(X, Y, X + 1, Y + 1)
            CombineRgn rgnCtl, rgnCtl, rgnPixel, RGN_XOR
   
            DeleteObject rgnPixel
            End If
        Next X
    Next Y
   
    ReleaseDC aCtl.hwnd, ctlDC

TransChkOpt_SetRgn:
DeleteObject SetWindowRgn(aCtl.hwnd, rgnCtl, True)
End Sub

Private Sub Command1_Click()
    OptionTransparente Option1, True
End Sub

pone un option arriba de una imagen y apreta el boton.

saludos.
Título: Re:Control OptionButton Fondo Transparte
Publicado por: LeandroA en Julio 18, 2011, 11:46:11 pm
Hola esta parece ser la forma mas correcta mas que, una por si la funete tiene difuminación y otra porque si no haces click sobre la parte que no hay una region solida no se produce el click
ni mas ni menos que de LaVolpe
http://www.vbforums.com/showthread.php?t=636390

no analize el codigo pero me da la espina que se podria reducir un poco para solo hacerlo solo full transparente, digo esto porque me parece que tiene mas opciones, lastima que no viene un ejemplo con todas las funciones.

Saludos.
Título: Re:Control OptionButton Fondo Transparte
Publicado por: E N T E R en Julio 19, 2011, 12:42:09 am
Seba el que me pasaste funciona pero cuando pierde el foco la fuente parece que se distorsiona queda todo con puntitas al salir del foco parece que se desactiva el ClearType.
Título: Re:Control OptionButton Fondo Transparte
Publicado por: Liudex en Julio 19, 2011, 10:00:59 am
Bueno Amigos yo creo que no es necesario usar ningun tipo de codigo para tener un OptionBotton transparente ya que ya tenemos ese control con esa funcionalidad en el mismo Vb Solo tenemos que seleccionar la opcion Microsoft Form 2.0 Objet library en los componenentes y nos aparecera el objeto que deseamos con la opcion de tranparencia.
Título: Re:Control OptionButton Fondo Transparte
Publicado por: seba123neo en Julio 19, 2011, 09:29:32 pm
Bueno Amigos yo creo que no es necesario usar ningun tipo de codigo para tener un OptionBotton transparente ya que ya tenemos ese control con esa funcionalidad en el mismo Vb Solo tenemos que seleccionar la opcion Microsoft Form 2.0 Objet library en los componenentes y nos aparecera el objeto que deseamos con la opcion de tranparencia.

si, pero el tema es mejor no depender de ningun OCX externo.
Título: Re:Control OptionButton Fondo Transparte
Publicado por: E N T E R en Julio 19, 2011, 11:16:03 pm
Bueno Amigos yo creo que no es necesario usar ningun tipo de codigo para tener un OptionBotton transparente ya que ya tenemos ese control con esa funcionalidad en el mismo Vb Solo tenemos que seleccionar la opcion Microsoft Form 2.0 Objet library en los componenentes y nos aparecera el objeto que deseamos con la opcion de tranparencia.

si, pero el tema es mejor no depender de ningun OCX externo.

Exactamente lo que quería decir me ganaste cuando mas ocx le pones a tu proyecto mas complicado se vuelve hacer el instalador por eso no usaba ya ese control.
Título: Re:Control OptionButton Fondo Transparte
Publicado por: seba123neo en Julio 19, 2011, 11:25:58 pm
probaste esto ?

MultiTransparent Control (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=54561&lngWId=1)
Título: Re:Control OptionButton Fondo Transparte
Publicado por: E N T E R en Julio 20, 2011, 11:27:32 am
probaste esto ?

MultiTransparent Control (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=54561&lngWId=1)

Va a servir este seba, solo que cuando se pone sobre algo mas negro ya se nota algunas puntitas. pero para mi proyecto ya da.