Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: AxioUK en Julio 27, 2018, 12:36:24 am
-
Hola Estimados:
Tantas Lunas!... estaba retomando un proyecto antiguo y me topé con un detalle que en esa ocasión dejé pasar, y es que un Borde de un UC, creado con RoundRect no cambia de color en tiempo de ejecución, pero si puedo hacerlo en tiempo de diseño, les agradecería un monton si los más avezados en APIs me pudieran decir en que estoy fallando:
'--Seccion APIs--
Private Declare Function DeleteObject Lib "Gdi32" (ByVal hObject As Long) As Long
Private Declare Function SetWindowRgn Lib "User32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
Private Declare Function CreateRoundRectRgn Lib "Gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
Private Declare Function RoundRect Lib "Gdi32" (ByVal hDC As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
'--Sub crea Bordes--
Private Sub DrawBorders()
Dim Rgn As Long
With UserControl
Rgn = CreateRoundRectRgn(0, 0, .Width, .Height, 0, 0)
SetWindowRgn .hwnd, Rgn, True
DeleteObject Rgn
.DrawWidth = 2
.ForeColor = m_BorderColor
RoundRect .hDC, 0, 0, .ScaleWidth, .ScaleHeight, 0, 0
End With
End Sub
'--Propiedades UC--
Public Property Get BorderColor() As OLE_COLOR
BorderColor = m_BorderColor
End Property
Public Property Let BorderColor(ByVal NewBorderColor As OLE_COLOR)
m_BorderColor = NewBorderColor
PropertyChanged "BorderColor"
DrawBorders
End Property
Como les decía, si cambio la Propiedad BorderColor en Diseño, si lo hace, pero al testearlo en Ejecución no pasa nada, mantiene el color asignado durante el diseño...
Agradecido de antemano, un abrazo a todos los emblemáticos del mejor Foro VB6!
-
Hola, toma la precaución de que el usercontrol tenga la opcion AutoRedraw = true
también asegúrate que tenga estas lineas
Private Sub UserControl_Show()
DrawBorders
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
m_BorderColor = PropBag.ReadProperty("BorderColor", vbRed)
DrawBorders
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty("BorderColor", m_BorderColor, vbRed)
End Sub
-
Gracias Leandro,
Justamente tenía un error en el ReadProperty, bueno... ya sacada esa espinita, les comparto el UC para quien le sirva, es re-trucho y la mitad del código lo rescaté de otros UC, pero en su tiempo me sirvió bastante, es un TextBox que formatea el texto ingresado a moneda, fecha, decimales. porcentaje, rut chileno, etc., para mantener el formato y que este no afecte su utilización en cálculos matemáticos tiene dos propiedades, GetTEXT y VALUE, la primera es como la propiedad TEXT con la diferencia que el texto recibido se muestra automaticamente con el formato establecido mientras que con TEXT el formato se aplica al perder el foco y VALUE "limpia" los valores de cualquier simbolo (excepto la coma decimal) permitiendo su utilización en calculos matematicos.
Bueno esop, Saludos a todos
https://www.dropbox.com/s/bbe64w2f2t6qyhk/AxioTextBox%20v1.22.rar?dl=0
-
have many bugs
Private Sub txtRaiz_Change()
If txtRaiz.text <> "txtRaiz" Then
RaiseEvent Change
End If
End Sub
Public Property Get Value() As Double
Dim sValue As Variant, i As Integer
Dim sValor As String
sValor = txtRaiz.text
If FormatToString = Money Then
'Limpio Simbolo moneda y Puntos
For i = 1 To Len(sValor)
If Not Mid$(sValor, i, 1) = "$" And Not Mid$(sValor, i, 1) = "." And Not Mid$(sValor, i, 1) = "%" Then
sValue = Trim$(sValue & Mid$(sValor, i, 1))
End If
Next i
ElseIf FormatToString = Percent Then
'Limpio Simbolo Porcentaje
If IsNumeric(sValor) Then
sValue = (sValor) / 100
End If
ElseIf FormatToString = ChileanRUT Then
'Limpio Gui髇 y Letras
For i = 1 To Len(sValor)
If IsNumeric(Mid$(sValor, i, 1)) = True Then
sValue = sValue & Mid$(sValor, i, 1)
End If
Next i
Else
'Cuento caracteres
sValue = Len(txtRaiz.text)
End If
Value = sValue
End Property