Autor Tema: Borde con RoundRect no cambia color en tiempo de ejecución  (Leído 34 veces)

0 Usuarios y 1 Visitante están viendo este tema.

AxioUK

  • Megabyte
  • ***
  • Mensajes: 101
  • Reputación: +16/-1
  • Modulos GSL
    • Ver Perfil
Borde con RoundRect no cambia color en tiempo de ejecución
« 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:

Código: Visual Basic
  1. '--Seccion APIs--
  2. Private Declare Function DeleteObject Lib "Gdi32" (ByVal hObject As Long) As Long
  3. Private Declare Function SetWindowRgn Lib "User32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
  4. 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
  5. 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
  6.  
  7. '--Sub crea Bordes--
  8. Private Sub DrawBorders()
  9. Dim Rgn As Long
  10. With UserControl
  11.     Rgn = CreateRoundRectRgn(0, 0, .Width, .Height, 0, 0)
  12.     SetWindowRgn .hwnd, Rgn, True
  13.     DeleteObject Rgn
  14.     .DrawWidth = 2
  15.     .ForeColor = m_BorderColor
  16.     RoundRect .hDC, 0, 0, .ScaleWidth, .ScaleHeight, 0, 0
  17. End With
  18. End Sub
  19.  
  20. '--Propiedades UC--
  21. Public Property Get BorderColor() As OLE_COLOR
  22. BorderColor = m_BorderColor
  23. End Property
  24.  
  25. Public Property Let BorderColor(ByVal NewBorderColor As OLE_COLOR)
  26. m_BorderColor = NewBorderColor
  27. PropertyChanged "BorderColor"
  28. DrawBorders
  29. End Property
  30.  

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!
_____________________________
Sé un poco de todo y mucho de nada... ;)

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1073
  • Reputación: +147/-8
    • Ver Perfil
Re:Borde con RoundRect no cambia color en tiempo de ejecución
« Respuesta #1 en: Julio 29, 2018, 09:24:05 pm »
Hola, toma la precaución de que el usercontrol tenga la opcion AutoRedraw = true

también asegúrate que tenga estas lineas

Código: Visual Basic
  1. Private Sub UserControl_Show()
  2.     DrawBorders
  3. End Sub
  4.  
  5. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  6.     m_BorderColor = PropBag.ReadProperty("BorderColor", vbRed)
  7.     DrawBorders
  8. End Sub
  9.  
  10.  
  11. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  12.     Call PropBag.WriteProperty("BorderColor", m_BorderColor, vbRed)
  13. End Sub

AxioUK

  • Megabyte
  • ***
  • Mensajes: 101
  • Reputación: +16/-1
  • Modulos GSL
    • Ver Perfil
Re:Borde con RoundRect no cambia color en tiempo de ejecución
« Respuesta #2 en: Julio 31, 2018, 10:47:56 pm »
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

_____________________________
Sé un poco de todo y mucho de nada... ;)

xxdoc

  • Bytes
  • *
  • Mensajes: 13
  • Reputación: +0/-0
    • Ver Perfil
Re:Borde con RoundRect no cambia color en tiempo de ejecución
« Respuesta #3 en: Agosto 02, 2018, 11:30:47 pm »
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