C# - Fade Label

  • C#
  • .NET (FX) 1.0–2.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Murdock.

    Kp, ob du Layered Windows bei Controls (sind ja auch Fenster) verwenden kannst; doch wenn ja, kannst du damit sehr leicht Controls überblenden. Müsstest du halt mal testen.

    Rikudo schrieb:

    überfaden
    Probier mal so was (ungetestet):
    2 transparente Controls (musste googeln) übereinanderlegen und gegeneinander die Transparenz ändern.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hab dafür einen total verrückten Code

    VB.NET-Quellcode

    1. Public Class BlendLabel
    2. Inherits Label
    3. Private t As Threading.Thread
    4. Private sf As New StringFormat With {.LineAlignment = StringAlignment.Near, .Alignment = StringAlignment.Near}
    5. Const WM_DESTROY = &H2
    6. Protected Overrides Sub WndProc(ByRef m As Message)
    7. MyBase.WndProc(m)
    8. If m.Msg = WM_DESTROY Then
    9. If Not t Is Nothing Then
    10. t.Abort()
    11. End If
    12. End If
    13. End Sub
    14. Public Overrides Property Text As String
    15. Get
    16. Return MyBase.Text
    17. End Get
    18. Set(value As String)
    19. If IsHandleCreated Then
    20. If Not t Is Nothing Then
    21. t.Abort()
    22. End If
    23. Dim args As New ThreadArgs(value, ForeColor)
    24. Dim pts As New Threading.ParameterizedThreadStart(AddressOf ChangeText)
    25. t = New Threading.Thread(pts)
    26. t.Start(args)
    27. Else
    28. MyBase.Text = value
    29. End If
    30. End Set
    31. End Property
    32. Sub New()
    33. MyBase.New()
    34. SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
    35. End Sub
    36. Private Function GetForeColor() As Color
    37. Return ForeColor
    38. End Function
    39. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    40. MyBase.OnPaint(e)
    41. e.Graphics.Clear(BackColor)
    42. Using sb As New SolidBrush(ForeColor)
    43. e.Graphics.DrawString(Text, Font, sb, ClientRectangle, sf)
    44. End Using
    45. End Sub
    46. Private Sub ChangeText(args As Object)
    47. Dim arg As ThreadArgs = DirectCast(args, ThreadArgs)
    48. While GetForeColor.A > 0
    49. Dim c As Color = GetForeColor()
    50. Dim a = c.A - 1
    51. Me.BeginInvoke(Sub() ForeColor = Color.FromArgb(a, c.R, c.G, c.B))
    52. Threading.Thread.Sleep(1)
    53. End While
    54. Me.BeginInvoke(Sub() MyBase.Text = arg.Text)
    55. While GetForeColor.A < 255
    56. Dim c As Color = GetForeColor()
    57. Dim a = c.A + 1
    58. Me.BeginInvoke(Sub() ForeColor = Color.FromArgb(a, c.R, c.G, c.B))
    59. Threading.Thread.Sleep(1)
    60. End While
    61. End Sub
    62. Private Class ThreadArgs
    63. Public Text As String
    64. Public ForeColor As Color
    65. Public Sub New(text As String, forecolor As Color)
    66. Me.Text = text
    67. Me.ForeColor = forecolor
    68. End Sub
    69. End Class
    70. End Class