WhiteControls v1.3

    • Release

    Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.

      WhiteControls v1.3

      Name des Programms:
      WhiteControls

      Beschreibung:
      Da mir in letzter Zeit die Farbe weiß recht gut gefällt und ich finde, dass man seine Anwendung auch ohne viel Farbe (sondern nur in Grautönen) recht stilvoll gestalten kann habe ich gedacht, ich bastel mal ein paar Control um. Hier ist das Ergebnis:

      - WhitePanel, ein Panel mit Seperatorfunktion (einfache Balken die sich an den Rändern anzeigen lassen)
      - WhiteProgressArc, eine Fortschrittsanzeige im Kreisformat
      - WhiteCheckbox, eine Checkbox eben
      - WhiteTrackbar eigene Trackbar die minimalistisch gerendert wird (finde ich schicker^^). Bei Mouseover werden die Grenzwerte eingeblendet
      - WhiteProgressbar, Progressbar eben^^
      - WhiteRadiobutton, wie der Name sagt - ein Radiobutton
      - WhiteStatusControl, (wie bei Firefox, der drehende Kreis der singalisiert, dass die Seite geladen wird). Hat 3 Darstellungsmodi

      Das sind bisher alle die ich gemacht habe. Neue werde ich natürlich hier hinzufügen und die alten verbessern/erweitern falls gefordert

      Screenshot/LogBuch:
      v1.0:


      v1.1
      - WhiteRadiobuttons: Hacken durch Punkt ersetzt


      v1.2
      - WhitePanel überarbeitet und erweitert (danke an diylab, deine Properties habe ich blind übernommen^^)
      - WhiteGroupBox NEU, Textausrichtung und Textverkürzung bei überlängen werden unterstützt (manuell und automatisch)


      v1.3
      - WhiteButton NEU, einfacher Button mit Mouseover-Animation
      - Mouseover-Effekte für Radiobutton/Checkbox hinzugefügt, enabled=false wird unterstützt
      - Kategorien zur besseren übersicht im PropertyGrid (im Desinger das Fenster "Eigenschaften")
      - Animationseffekt für die Progressbar


      Verwendete Programmiersprache:
      IDE: VB 2008 Express

      Systemanforderungen:
      .NET Framework 2.0

      Download:
      siehe Anhang

      Lizenz/Weitergabe:
      Freeware
      Schreibt mir bitte wenn ihr es in eurem Projekt verwendet, ich bin neugierig^^
      Dateien

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „FreakJNS“ ()

      hey, dankeschön^^
      also statuscontrol, progressbar, trackbar, statusconrol und progressarc sind von control abgeleitet, also größtenteils selbsterstellt. radiobutton, checkbox und panel sind ableitung der standartcontrols - sie werden nur mittels GDI selbst gezeichnet. Ist aber alles kein Hexenwerk
      Also den WhiteRadiobutton sehe ich etwas problematisch. Durch den Haken erinnert der zu sehr an eine Checkbox. Evtl einfach einen grauen/schwarzen Kreis statt des Hakens

      Skybird schrieb:

      Das sind ja Ubisoftmethoden hier !

      Hallo FreakJNS,

      herzlichen Glückwunsch - das hast Du sehr gut gemacht - gefällt mir ausgezeichnet.
      Ich werde es sicher einsetzen und schreibe dann hier etwas dazu.

      Ich arbeite viel mit Groupboxen - ist da auch etwas geplant?

      Vielen Dank für Deine Mühe!
      Bruno
      hi, vielen dank für das feedback!

      @ vb-checker
      stimmt. habe ich gefixt, jetzt haben die Radiobuttons keine Hacken mehr^^

      @ Techniker
      so, auf Framework 2.0 runtergeschraubt

      @ diylab
      danke! die Panels haben eine Seperatorfunktion die du vllt gebrauchen kannst. Trotzdem fange ich gleich mal mit der Groupbox an. Wenn jemand ideen für Iwelche effekte hat (siehe trackbar) bitte sagen!

      FreakJNS schrieb:

      @ diylab
      danke! die Panels haben eine Seperatorfunktion die du vllt gebrauchen kannst. Trotzdem fange ich gleich mal mit der Groupbox an. Wenn jemand ideen für Iwelche effekte hat (siehe trackbar) bitte sagen!

      Moin FreakJNS,

      also ich finde Deine Controls so super, dass ich Dir noch eine Weile hier in Deinem Thread auf die Pelle rücken möchte :D.
      Ich habe einige Ideen und hoffe, Du verlierst nicht so schnell die Lust an den Controls.
      Alles was ich vorschlagen möchte, ist bitte nur als konstruktive Kritik zu verstehen!

      1. Danke, dass Du Dich an die GroupBoxen ranmachst. Im Prinzip können Sie ja wie die SeparatorPanele sein oder so einen schönen Border haben wie z.B. Deine Progressbar, aber wichtig ist die .Text Property. Schön wäre es natürlich, wenn .Text links,mitte,rechts zur GroupBox ausgerichtet werden könnte. Und dann gleich noch eine Ellipsis-Kürzung des Textes wenn er zu lang ist (Routine könnte ich bei Bedarf liefern ohne API).
      2. Ich hätte gern bei allen Controls den DoubleBuffer auf ON und wenn nicht permamant, so doch zumindest als Property.
      3. Das Panel ist gut mit den Separatoren, jedoch schlage ich vor, die Breite aller vier Separatoren veränderbar zu machen! Dann kann man coole Sachen damit anstellen. Am besten noch die Farbe aller Separatoren veränderbar, dann wird es sehr flexibel (muss aber nicht).
      Ein mögliche Lösung für solch ein Panel hab ich mal zusammengebaut:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. '********************************************************************
      2. '* "WhiteControls" separator panel
      3. '********************************************************************
      4. Public Class WhitePanel
      5. Inherits Panel
      6. Private _SeparatorColorRight As Color
      7. Public Property SeparatorColorRight() As Color
      8. Get
      9. Return Me._SeparatorColorRight
      10. End Get
      11. Set(ByVal value As Color)
      12. Me._SeparatorColorRight = value
      13. Me.Invalidate()
      14. End Set
      15. End Property
      16. Private _SeparatorColorLeft As Color
      17. Public Property SeparatorColorLeft() As Color
      18. Get
      19. Return Me._SeparatorColorLeft
      20. End Get
      21. Set(ByVal value As Color)
      22. Me._SeparatorColorLeft = value
      23. Me.Invalidate()
      24. End Set
      25. End Property
      26. Private _SeparatorColorTop As Color
      27. Public Property SeparatorColorTop() As Color
      28. Get
      29. Return Me._SeparatorColorTop
      30. End Get
      31. Set(ByVal value As Color)
      32. Me._SeparatorColorTop = value
      33. Me.Invalidate()
      34. End Set
      35. End Property
      36. Private _SeparatorColorBottom As Color
      37. Public Property SeparatorColorBottom() As Color
      38. Get
      39. Return Me._SeparatorColorBottom
      40. End Get
      41. Set(ByVal value As Color)
      42. Me._SeparatorColorBottom = value
      43. Me.Invalidate()
      44. End Set
      45. End Property
      46. Private _SeparatorWidth As Padding
      47. Public Property SeparatorWidth() As Padding
      48. Get
      49. Return Me._SeparatorWidth
      50. End Get
      51. Set(ByVal value As Padding)
      52. Me._SeparatorWidth = value
      53. Me.Invalidate()
      54. End Set
      55. End Property
      56. Public Sub New()
      57. Me.DoubleBuffered = True
      58. Me.SeparatorColorRight = Color.Silver
      59. Me.SeparatorColorLeft = Color.Silver
      60. Me.SeparatorColorTop = Color.Silver
      61. Me.SeparatorColorBottom = Color.Silver
      62. Me.SeparatorWidth = New Padding(2)
      63. End Sub
      64. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
      65. ' first system painting!
      66. MyBase.OnPaint(e)
      67. ' all userpaintings below
      68. e.Graphics.PageUnit = GraphicsUnit.Pixel
      69. Dim penRight As Pen = New Pen(Me.SeparatorColorRight, _SeparatorWidth.Right)
      70. Dim penLeft As Pen = New Pen(Me.SeparatorColorLeft, _SeparatorWidth.Left)
      71. Dim penTop As Pen = New Pen(Me.SeparatorColorTop, _SeparatorWidth.Top)
      72. Dim penBottom As Pen = New Pen(Me.SeparatorColorBottom, _SeparatorWidth.Bottom)
      73. If _SeparatorWidth.Right > 0 Then
      74. e.Graphics.DrawLine(penRight, Me.Size.Width - (_SeparatorWidth.Right \ 2), _SeparatorWidth.Top, Me.Size.Width - (_SeparatorWidth.Right \ 2), Me.Size.Height)
      75. End If
      76. If _SeparatorWidth.Left > 0 Then
      77. e.Graphics.DrawLine(penLeft, _SeparatorWidth.Left \ 2, 0, _SeparatorWidth.Left \ 2, Me.Size.Height)
      78. End If
      79. If _SeparatorWidth.Top > 0 Then
      80. e.Graphics.DrawLine(penTop, 0, _SeparatorWidth.Top \ 2, Me.Size.Width, _SeparatorWidth.Top \ 2)
      81. End If
      82. If _SeparatorWidth.Bottom > 0 Then
      83. e.Graphics.DrawLine(penBottom, 0, Me.Size.Height - (_SeparatorWidth.Bottom \ 2), Me.Size.Width, Me.Size.Height - (_SeparatorWidth.Bottom \ 2))
      84. End If
      85. End Sub
      86. End Class



      Die Berechnungen der Linien an Hand der Pen-Dicke ist nicht optimal gelöst - da ist mir auf die Schnelle nichts besseres eingefallen (wie macht man das richtig?).
      Müsste also überarbeitet werden..

      Das Ding sieht dann übertrieben so aus (Demoprogramm im Anhang):


      Was meinst Du?
      Wollen wir auf diese Weise noch ein bisschen weiter machen?

      LG,
      Bruno
      Dateien
      so, alle controls sind jetzt doublebuffered und die GroupBox ist fertig (erst wollte ich sie ähnlich wie die progressbar gestallten, dann mit farbverlauf was allerdings beides ****** aussieht - vor allem wenn mehere nebeneinander angebracht werden..). Darum ein ähnlich schlichtes Design wie die Ursprungsvariante - dafür ein paar neue Properties: Liniendicke, Textausrichtung (links, mitte, rechts) und die Ellipsis-Kürzung. Letztes kann automatisch ausgeführt werden (kürzt den text wenn er nicht in das control passt) oder durch einen festen wert (maximalanzahl der Zeichen) ausgeführt werden.

      Die Berechnungen der Linien an Hand der Pen-Dicke ist nicht optimal gelöst - da ist mir auf die Schnelle nichts besseres eingefallen (wie macht man das richtig?).
      Müsste also überarbeitet werden..

      Stimmt, wenn man eine dicke von 10 einstellt wirkt der pinsel nur 5 dick da die hälfte auserhalb des controls gezeichnet wird. also könnte man entweder rechnerisch die koordinaten anpassen oder, so wie ich es gemacht habe, rectangles mit entsprechenden maßen an die seiten zeichnen^^
      Dir nochmal ein dickes Danke da du nicht nur haben willst, sondern aktiv hilfst!
      Geil!

      Bin gerade nach Hause gekommen und werde morgen erst Testen können, aber Du bist echt gut - danke!
      Und schnell bist Du auch :).

      Bis morgen, LG,
      Bruno

      FreakJNS schrieb:

      ..so wie ich es gemacht habe, rectangles mit entsprechenden maßen an die seiten zeichnen^^

      Hey - das ist genial!!!
      Das würde ja die Paint Routine unglaublich abspecken und weil dort auch nichts mehr berechnet werden muss - beschleunigen.
      Danke für diesen wertvollen Tipp!

      Könnte also so aussehen:

      VB.NET-Quellcode

      1. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
      2. MyBase.OnPaint(e) 'system painting
      3. ' top
      4. e.Graphics.FillRectangle(New SolidBrush(Me.SeparatorColorTop), _
      5. New Rectangle(0, 0, Me.Width, Me.SeparatorWidth.Top))
      6. ' right
      7. e.Graphics.FillRectangle(New SolidBrush(Me.SeparatorColorRight), _
      8. New Rectangle(Me.Width - Me.SeparatorWidth.Right, 0, Me.SeparatorWidth.Right, Me.Height))
      9. ' bottom
      10. e.Graphics.FillRectangle(New SolidBrush(Me.SeparatorColorBottom), _
      11. New Rectangle(0, Me.Height - Me.SeparatorWidth.Bottom, Me.Width, Me.SeparatorWidth.Bottom))
      12. ' left
      13. e.Graphics.FillRectangle(New SolidBrush(Me.SeparatorColorLeft), _
      14. New Rectangle(0, 0, Me.SeparatorWidth.Left, Me.Height))
      15. End Sub


      Ich glaube, einfacher gehts dann wirklich nicht mehr :P ..

      LG,
      Bruno
      So, eine neue Version ist da^^
      Leider gibt es nur recht wenige Neuerungen (siehe erster Post).
      Eine etwas größere - eine "WhiteForm" im Stil der WhiteControls - ist in Arbeit. Dadurch wird ermöglicht auch die Controlboxen zum Minimieren etc entsprechend darzustellen. Das ganze ist etwas mehr arbeit, da ich alle Mausbefehle (verschieben der Form, Formgröße verändern, etc) selbst schreiben muss..
      Hallo,

      Ich habe deine DLL als Verweis hinzugefügt, bekomme beim Debuggen jedoch eine Fehlermeldung

      Quellcode

      1. Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Die Datei oder Assembly "WhiteControls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden..


      Hatte das Problem bisher noch nie beim Einbinden von Verweisen. Die DLL wird als lokale Kopie gespeichert und befindet sich auch im Debug Ordner.
      Habe ich irgendetwas vergessen, oder ist es ein Fehler in deiner DLL? Benutze die 1.3 Version.
      Hey danke!
      Ich habe wirklich vergessen es umzubenennen.
      Jetzt wo du es erwähnt hast, hätte ich auch bei der Fehlermeldung von selbst drauf kommen müssen.
      Manchmal sieht man den Wald vor lauter Bäumen nicht ^^

      Deine Controls sehen wirklich klasse aus und ich mag sehr diesen dezenten Stil.
      Als Vorschlag hätte ich noch einen Seperator (Ich hab da ein wenig geschummelt und dein Panel genommen mit minimaler Breite ;) )