Windows 8 Task-Manager Tracker Control

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Jonas Jelonek.

    Windows 8 Task-Manager Tracker Control

    Guten Tag

    In Windows 8 hat Microsoft den Task-Manager komplett überarbeitet und anschaulicher gestaltet. Im Tab Leistung findet man nun auch die Auslastung verschiedener Geräte schön in einem Tracker Control dargestellt wie auf folgendem Bild.

    Da mir dieses Control sehr gut gefällt, habe ich mal versucht, dieses nachzubauen. Doch jetzt hänge ich fest.
    Im Anhang befindet sich das Projekt.
    Ich habe da zurzeit zwei Probleme:

    1. Bei mir kommt kein flüssiger Übergang, also das Control flackert immer.
    2. Ich komme nicht darauf, wie ich die Linien, die den Wert anzeigen, zeichne.

    Da ich diese Probleme schon lange habe und bisher keine Hilfe erhalten habe, möchte ich euch hier jetzt fragen und hoffe, ich erhalte hier Hilfe.

    Vielen Dank im Voraus

    MfG

    Jonas Jelonek
    Dateien
    • Tracker.zip

      (95,48 kB, 91 mal heruntergeladen, zuletzt: )
    Mit mehreren Threads arbeiten etc.
    Anscheinend wurde unsauber programmiert.

    Zeig uns den Code und wir können dir vll helfen.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    VB.NET-Quellcode

    1. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    2. MyBase.OnPaint(e)
    3. With e.Graphics
    4. 'Raster zeichnen
    5. If Style = TrackerStyle.Processor Then
    6. GridColor = Color.FromArgb(17, 125, 187)
    7. ElseIf Style = TrackerStyle.Memory Then
    8. GridColor = Color.FromArgb(139, 18, 174)
    9. ElseIf Style = TrackerStyle.Disk Then
    10. GridColor = Color.FromArgb(77, 166, 12)
    11. ElseIf Style = TrackerStyle.Ethernet Then
    12. GridColor = Color.FromArgb(167, 79, 0)
    13. End If
    14. .DrawRectangle(New Pen(New SolidBrush(GridColor)), 0, 0, Me.Width - 1, Me.Height - 1)
    15. If GridLines = True Then DrawGrid()
    16. DrawValues()
    17. End With
    18. End Sub
    19. Private Sub DrawGrid()
    20. Dim Rows As Integer = 20
    21. Dim Columns As Integer = 30
    22. Dim FactorX As Double = (Me.ClientSize.Width / Columns)
    23. Dim FactorY As Double = (Me.ClientSize.Height / Rows)
    24. Using [Graphics] As Graphics = CreateGraphics(), DrawingPen As New Pen(New SolidBrush(GridColor))
    25. Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighSpeed
    26. For y As Integer = 0 To Rows
    27. Graphics.DrawLine(DrawingPen, 0, CInt(y * FactorY), Me.Width, CInt(y * FactorY))
    28. Next
    29. For x As Integer = 0 To Columns + LocAdd
    30. Graphics.DrawLine(DrawingPen, CInt((x * FactorX) - LocAdd), 0, CInt((x * FactorX) - LocAdd), Me.Height)
    31. Next
    32. End Using
    33. End Sub
    34. Private Sub DrawValues()
    35. Dim GraphicPath As New Drawing2D.GraphicsPath
    36. Using [Graphics] As Graphics = CreateGraphics()
    37. Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighSpeed
    38. Graphics.DrawLine(New Pen(New SolidBrush(GridColor), 3), CInt(Me.Width - LocAdd), CInt(Me.Height - _Value), Me.Width, CInt(Me.Height - _Value))
    39. End Using
    40. End Sub
    41. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    42. LocAdd += 5
    43. Me.Invalidate()
    44. End Sub
    Dateien
    • Tracker.zip

      (95,48 kB, 99 mal heruntergeladen, zuletzt: )
    Also ich hab mal ganz kurz probiert, da sollte eigentlich nichts flackern.
    @Jonas Jelonek
    Du erbst bei deinem "Control" ja gar nicht von einem Control, wieso ?

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Drawing.Drawing2D
    3. Public Class Tracker
    4. Inherits Control
    5. Public StartValue As Integer = 0
    6. Public WithEvents t As New Timer With {.Interval = 500}
    7. Sub New()
    8. MyBase.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    9. MyBase.DoubleBuffered = True
    10. t.Start()
    11. End Sub
    12. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    13. MyBase.OnPaint(e)
    14. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
    15. For i As Integer = StartValue To Me.Width Step 40
    16. e.Graphics.DrawLine(Pens.LightBlue, New Point(i, 0), New Point(i, Me.Height))
    17. Next
    18. e.Graphics.DrawRectangle(Pens.DodgerBlue, New Rectangle(0, 0, Me.Width - 1, Me.Height - 1))
    19. End Sub
    20. Public Sub t_Tick() Handles t.Tick
    21. 'Hier muss noch was angepasst werden
    22. StartValue -= 5
    23. Me.Invalidate()
    24. End Sub
    25. End Class
    Hmm. Das ist mir bisher noch garnich aufgefallen. Sollte ich mal hinzufügen.
    Bei Controls, die den Windows Controls ähneln, erbe ich immer von denen, aber wenn es andere Controls sind, denke ich meistens nicht dran.
    Schreib den Code einfach so um, wie Gonger es gesagt hat:

    VB.NET-Quellcode

    1. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    2. MyBase.OnPaint(e)
    3. With e.Graphics
    4. 'Raster zeichnen
    5. If Style = TrackerStyle.Processor Then
    6. GridColor = Color.FromArgb(17, 125, 187)
    7. ElseIf Style = TrackerStyle.Memory Then
    8. GridColor = Color.FromArgb(139, 18, 174)
    9. ElseIf Style = TrackerStyle.Disk Then
    10. GridColor = Color.FromArgb(77, 166, 12)
    11. ElseIf Style = TrackerStyle.Ethernet Then
    12. GridColor = Color.FromArgb(167, 79, 0)
    13. End If
    14. .DrawRectangle(New Pen(New SolidBrush(GridColor)), 0, 0, Me.Width - 1, Me.Height - 1)
    15. If GridLines = True Then DrawGrid(e.Graphics)
    16. DrawValues(e.Graphics)
    17. End With
    18. End Sub
    19. Private Sub DrawGrid(g As Graphics)
    20. Dim Rows As Integer = 20
    21. Dim Columns As Integer = 30
    22. Dim FactorX As Double = (Me.ClientSize.Width / Columns)
    23. Dim FactorY As Double = (Me.ClientSize.Height / Rows)
    24. Using DrawingPen As New Pen(New SolidBrush(GridColor))
    25. g.SmoothingMode = Drawing2D.SmoothingMode.HighSpeed
    26. For y As Integer = 0 To Rows
    27. g.DrawLine(DrawingPen, 0, CInt(y * FactorY), Me.Width, CInt(y * FactorY))
    28. Next
    29. For x As Integer = 0 To Columns + LocAdd
    30. g.DrawLine(DrawingPen, CInt((x * FactorX) - LocAdd), 0, CInt((x * FactorX) - LocAdd), Me.Height)
    31. Next
    32. End Using
    33. End Sub
    34. Private Sub DrawValues(g As Graphics)
    35. Dim GraphicPath As New Drawing2D.GraphicsPath
    36. g.SmoothingMode = Drawing2D.SmoothingMode.HighSpeed
    37. g.DrawLine(New Pen(New SolidBrush(GridColor), 3), CInt(Me.Width - LocAdd), CInt(Me.Height - _Value), Me.Width, CInt(Me.Height - _Value))
    38. End Sub
    39. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    40. LocAdd += 5
    41. Me.Invalidate()
    42. End Sub