Farbige runde Progressbars

    • .NET (FX) 4.5–4.8
    • VB.NET

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

      Farbige runde Progressbars

      Hallo Leute,

      ich wollte soetwas schon immer machen und heute habe ich einmal "gebastelt".
      Ich möchte Euch den Quellcode nicht vorenthalten.

      Einfach nur einen Panel auf die Form legen. Dem Panel eine Hintergrundfarbe und einen Font zuweisen.
      Dann einfach die Progressbar mit folgendem Parameter aufrufen:

      BODrawProgress(Panel, Prozent, Farbe1, Farbe2, Balkenbreite)

      Hier ein Videoclip von den Möglichkeiten:
      youtu.be/jmhhQA1f7eU


      Hier der Code:

      VB.NET-Quellcode

      1. Imports System.Drawing.Drawing2D
      2. ''' <summary>
      3. ''' Erstellt eine runde Progressbar mit 100 Ticks (0-100%)
      4. ''' Font wird vom Panel verwendet, Hingtergrundfarbe ebenfalls
      5. ''' Passt sich automatisch an die Panel-Größe an
      6. ''' </summary>
      7. ''' <param name="DestPanel">Windows Form Panel</param>
      8. ''' <param name="Percentage">Prozentsatz 0-100</param>
      9. ''' <param name="BarColor1">Farbe 1 für Farbverlauf</param>
      10. ''' <param name="BarColor2">Farbe 2 für Farbverlauf</param>
      11. ''' <param name="BarWidth">Breite des Fortschrittsbalkens</param>
      12. Public Sub BODrawProgress(DestPanel As Panel, Percentage As Single, BarColor1 As Color, BarColor2 As Color, BarWidth As Integer)
      13. If Percentage > 100 Then Percentage = 100
      14. If Percentage < 0 Then Percentage = 0
      15. Dim g As Graphics = Graphics.FromHwnd(DestPanel.Handle)
      16. Dim rectForGradient As Rectangle = New Rectangle(0, 0, DestPanel.Width, DestPanel.Height)
      17. Dim rect As Rectangle = New Rectangle(BarWidth, BarWidth, DestPanel.Width - BarWidth - BarWidth, DestPanel.Height - BarWidth - BarWidth)
      18. Dim progressAngle = CSng(360 / 100 * Percentage)
      19. Dim remainderAngle = 360 - progressAngle
      20. Using progressPen As New Pen(BarColor1, BarWidth), remainderPen As New Pen(Color.LightGray, CInt(BarWidth))
      21. If Percentage = 0 Then g.Clear(DestPanel.BackColor) ' Initial mit 0% aufrufen, damit der Hintergrund geleert wird
      22. g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
      23. g.CompositingQuality = CompositingQuality.HighQuality
      24. g.PixelOffsetMode = PixelOffsetMode.HighQuality
      25. g.InterpolationMode = InterpolationMode.HighQualityBilinear
      26. g.DrawArc(remainderPen, rect, progressAngle - 90, remainderAngle) 'Grau
      27. Dim GP As New GraphicsPath
      28. GP.AddArc(BarWidth, BarWidth, DestPanel.Width - BarWidth - BarWidth, DestPanel.Height - BarWidth - BarWidth, -90, progressAngle)
      29. Dim LGBR As New LinearGradientBrush(rectForGradient, BarColor1, BarColor2, 0)
      30. g.DrawPath(New Pen(LGBR, BarWidth), GP)
      31. End Using
      32. Dim text As String = Percentage.ToString + "%"
      33. Dim textSize = g.MeasureString(text, DestPanel.Font)
      34. Dim textPoint As New Point(CInt(rect.Left + (rect.Width / 2) - (textSize.Width / 2)), CInt(rect.Top + (rect.Height / 2) - (textSize.Height / 2)))
      35. g.FillRectangle(New SolidBrush(DestPanel.BackColor), New RectangleF(textPoint.X, textPoint.Y, textSize.Width, textSize.Height))
      36. g.DrawString(text, DestPanel.Font, New SolidBrush(Color.Black), textPoint)
      37. End Sub


      Und so wird die Progressbar verwendet:

      VB.NET-Quellcode

      1. Private Sub Button_TestProgress2_Click(sender As Object, e As EventArgs) Handles Button_TestProgress2.Click
      2. Panel_Progressbar.Width = 182
      3. Panel_Progressbar.Height = 182
      4. Panel_Progressbar.Font = New Font("Microsoft YaHei UI", 22)
      5. For i As Integer = 0 To 100
      6. BODrawProgress(Panel_Progressbar, i, Color.Orange, Color.OrangeRed, 10)
      7. 'warte(0.02) 'hier nur zum Test eine Warteschleife oder was auch imme
      8. Next i
      9. End Sub


      verschoben von den Sonstigen Problemstellungen in den Sourcecodeaustausch ~VaporiZed
      Bilder
      • Unbenannt-1.jpg

        23,01 kB, 193×184, 361 mal angesehen
      Liebe Grüße
      Roland Berghöfer

      Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

      Mach daraus doch ein eigenes Control. Dann brauchst kein Panel aufs Form ziehen sondern direkt dein ProgressBar Control, ist doch viel praktischer, wenn zur Laufzeit schon alles sichtbar ist und auch im Designer eingestellt werden kann. Noch dazu vermeidest du redundanten Code, wenn man mehrere davon auf verschiedenen Forms hat, so bleibt das malen im Control selbst.
      @dive26 Ich hab mal eben fix da ein UserControl draus gemacht:
      vb-paradise.de/index.php/Attac…5862878a142763607f2a083ac
      CircularProgress.zip
      Aufruf:
      Form mit CircularProgress-Control und TrackBar, TrackBar.Maximum = 100

      VB.NET-Quellcode

      1. Public Class Form1
      2. Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
      3. CircularProgress1.Percentage = TrackBar1.Value
      4. End Sub
      5. Private Sub Form1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
      6. CircularProgress1.Invalidate()
      7. End Sub
      8. End Class
      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!

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ () aus folgendem Grund: Korrektur im Konstruktor des Controls