Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado 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)
-
jajaja el post en planet source code es mio :P... y realmente no sirve si el ClearType esta activado, porque se caga fiero
-
:'( Hay alguna forma de solucionar eso.
-
Hola, proba esto:
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
probaste esto ?
MultiTransparent Control (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=54561&lngWId=1)
-
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.