Eigene ScrollBar für Eigenes ListControl..(Mein Kopf Raucht!)

  • VB.NET

Es gibt 49 Antworten in diesem Thema. Der letzte Beitrag () ist von Baa$.

    Eigene ScrollBar für Eigenes ListControl..(Mein Kopf Raucht!)

    Hey Moin Moin :thumbsup:

    Also ich sehe glaube ich den Wald vor Lauter Bäumen nicht mehr, ich habe das Prinzip einer Scrollbar/Vertical/Horizontal verstanden aber irgendwie Kriege ich es nicht so umgesetzt wie ich das möchte..
    hier mal mein Source... Wäre Super wenn ihr mir weiterhelft...
    Mein Größte Kopfick gerade für mich das die Maus nicht über Thumb und mit der Mouse Bewegung gleich schnell auf und abgeht... Schauts euch eventuell mal an..
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Imports System.Drawing.Drawing2D
    2. Public Class ScrollBar
    3. Inherits Control
    4. ''
    5. ''Todolist >
    6. ''Maximum = Vertical Track.Height
    7. ''Maximum = Horizontal Track.Width
    8. ''Minimum = Begin = Track.x/Track.y
    9. ''Value = ThumpPosition
    10. ''Scroll Hoch und Runter bei PageUp/PAGEDown & UP/Down Tast mit Smallchange!?
    11. ''Event Für Scrollen & Für Value Change hinzufügen
    12. ''
    13. #Region "Declares"
    14. Private ThumCordinate As Integer = 0
    15. Private TRACKrectangle As Rectangle
    16. Private THUMBrectangle As Rectangle
    17. Private ReadOnly THUMsize As Integer = 50
    18. Private ReadOnly GRAPHICPART As New GraphicsPath
    19. #End Region
    20. Sub New()
    21. SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    22. SetStyle(ControlStyles.UserPaint, True)
    23. SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    24. SetStyle(ControlStyles.ResizeRedraw, True)
    25. DoubleBuffered = True
    26. UpdateStyles()
    27. End Sub
    28. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    29. MyBase.OnPaint(e)
    30. GRAPHICPART.Reset()
    31. GRAPHICPART.AddRectangle(TRACKrectangle)
    32. With e.Graphics
    33. Select Case MState
    34. Case MouseState.Down
    35. If _Orientation = Orientation.Horizontal Then
    36. Size = New Size(Width, 12)
    37. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    38. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    39. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    40. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    41. ElseIf _Orientation = Orientation.Vertical Then
    42. Size = New Size(12, Height)
    43. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    44. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    45. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    46. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    47. End If
    48. Case MouseState.Over
    49. If _Orientation = Orientation.Horizontal Then
    50. Size = New Size(Width, 12)
    51. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    52. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    53. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    54. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    55. ElseIf _Orientation = Orientation.Vertical Then
    56. Size = New Size(12, Height)
    57. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    58. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    59. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    60. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    61. End If
    62. Case MouseState.None
    63. If _Orientation = Orientation.Horizontal Then
    64. Size = New Size(Width, 6)
    65. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    66. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    67. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    68. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    69. ElseIf _Orientation = Orientation.Vertical Then
    70. Size = New Size(6, Height)
    71. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    72. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    73. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    74. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    75. End If
    76. End Select
    77. End With
    78. End Sub
    79. Protected Overrides Sub OnCreateControl()
    80. MyBase.OnCreateControl()
    81. If _Orientation = Orientation.Horizontal Then
    82. Dock = 0
    83. Size = New Size(350, 6)
    84. Dock = 2
    85. ElseIf _Orientation = Orientation.Vertical Then
    86. Dock = 0
    87. Size = New Size(6, 350)
    88. Dock = 4
    89. End If
    90. End Sub
    91. #Region "Propertys"
    92. Enum Orientation
    93. Horizontal = 0
    94. Vertical = 1
    95. End Enum
    96. Private _Orientation As Orientation = Orientation.Horizontal
    97. Public Property Orientatian As Orientation
    98. Get
    99. Return _Orientation
    100. End Get
    101. Set(value As Orientation)
    102. _Orientation = value
    103. If _Orientation = Orientation.Horizontal Then
    104. Dock = 0
    105. Size = New Size(350, 6)
    106. Dock = 2
    107. ElseIf _Orientation = Orientation.Vertical Then
    108. Dock = 0
    109. Size = New Size(6, 350)
    110. Dock = 4
    111. End If
    112. Invalidate()
    113. End Set
    114. End Property
    115. Private _Minimum As Integer = 0
    116. Public Property Minimum As Integer
    117. Get
    118. Return _Minimum
    119. End Get
    120. Set(value As Integer)
    121. _Minimum = value
    122. End Set
    123. End Property
    124. Private _Maximum As Integer = 100
    125. Public Property Maximum As Integer
    126. Get
    127. Return _Maximum
    128. End Get
    129. Set(value As Integer)
    130. _Maximum = value
    131. End Set
    132. End Property
    133. Private _Value As Integer
    134. Public Property Value As Integer
    135. Get
    136. Return _Value
    137. End Get
    138. Set(value As Integer)
    139. _Value = value
    140. End Set
    141. End Property
    142. Private _SmallChange As Integer = 1
    143. Public Property SmallChange As Integer
    144. Get
    145. Return _SmallChange
    146. End Get
    147. Set(value As Integer)
    148. _SmallChange = value
    149. End Set
    150. End Property
    151. Private _LargeChange As Integer = 10
    152. Public Property LargeChange As Integer
    153. Get
    154. Return _LargeChange
    155. End Get
    156. Set(value As Integer)
    157. _LargeChange = value
    158. End Set
    159. End Property
    160. #End Region
    161. #Region "Mouse Events"
    162. Private MState As MouseState = MouseState.None
    163. Private Enum MouseState
    164. Over
    165. Down
    166. None
    167. End Enum
    168. Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
    169. MyBase.OnMouseDown(e)
    170. If GRAPHICPART.IsVisible(e.Location) Then
    171. 'Über Thumb Click ^ Hochbewegen mit LargeChange
    172. MState = MouseState.Down : Invalidate()
    173. 'Unter Thumb Click Runter Hochbewegen mit LargeChange
    174. End If
    175. End Sub
    176. Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
    177. MyBase.OnMouseMove(e)
    178. If e.Button = MouseButtons.Left Then
    179. If _Orientation = Orientation.Horizontal Then
    180. '_Value = ThumbCordinate
    181. ThumCordinate = Percentage(e.X, TRACKrectangle.Width) + (THUMsize * 2) 'X
    182. ElseIf _Orientation = Orientation.Vertical Then
    183. '_Value = ThumbCordinate
    184. ThumCordinate = Percentage(e.Y, TRACKrectangle.Height) + (THUMsize * 2) 'Y
    185. End If
    186. End If
    187. If GRAPHICPART.IsVisible(e.Location) Then
    188. MState = MouseState.Over : Invalidate()
    189. End If
    190. End Sub
    191. Protected Overrides Sub OnMouseLeave(e As EventArgs)
    192. MyBase.OnMouseLeave(e)
    193. MState = MouseState.None : Invalidate()
    194. End Sub
    195. #End Region
    196. #Region "Helps"
    197. Private Function Percentage(Value As Integer, Maximum As Integer)
    198. Return CInt(Value / Maximum * 100)
    199. End Function
    200. #End Region
    201. End Class


    *und bevor es jemand schreibt oder Fragt!
    *Ja ich habe mir Examples & Google durchforstet... Verstehe auch wie es geht aber gerade kriege ich Zahlen Collaer!
    *die ScrollBar ist für ein Eigenes ListControl das ich Für einen Eigenen IPTV Player schreibe
    * ScrollBars = 65% ; ListControl = 50% ; IPTV Player Programm = 80% Fertigungsstatus.
    *Wenn ihr die anderen Sources braucht um reinzusteigen reiche ich sie nach..
    *Danke im Vorraus für Hilfe :thumbsup:
    ps. ich hoffe ihr versteht meinen TodoList Spikzettel falls da fragen zu sind haut sie raus! :)
    @Baa$ Machst Du zunächst Option Strict On, dann sehen wir weiter.
    Visual Studio - Empfohlene Einstellungen
    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!
    Klar, Liebend Gern..
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Drawing.Drawing2D
    3. Public Class ScrollBar
    4. Inherits Control
    5. ''
    6. ''Todolist >
    7. ''Maximum = Vertical Track.Height
    8. ''Maximum = Horizontal Track.Width
    9. ''Minimum = Begin = Track.x/Track.y
    10. ''Value = ThumpPosition
    11. ''Scroll Hoch und Runter bei PageUp/PAGEDown & UP/Down Tast mit Smallchange!?
    12. ''Event Für Scrollen & Für Value Change hinzufügen
    13. ''
    14. #Region "Declares"
    15. Private ThumCordinate As Integer = 0
    16. Private TRACKrectangle As Rectangle
    17. Private THUMBrectangle As Rectangle
    18. Private ReadOnly THUMBsize As Integer = 50
    19. Private ReadOnly GRAPHICPART As New GraphicsPath
    20. #End Region
    21. Sub New()
    22. SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    23. SetStyle(ControlStyles.UserPaint, True)
    24. SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    25. SetStyle(ControlStyles.ResizeRedraw, True)
    26. DoubleBuffered = True
    27. UpdateStyles()
    28. End Sub
    29. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    30. MyBase.OnPaint(e)
    31. GRAPHICPART.Reset()
    32. GRAPHICPART.AddRectangle(TRACKrectangle)
    33. With e.Graphics
    34. Select Case MState
    35. Case MouseState.Down
    36. If _Orientation = Orientation.Horizontal Then
    37. Size = New Size(Width, 12)
    38. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    39. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    40. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    41. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    42. ElseIf _Orientation = Orientation.Vertical Then
    43. Size = New Size(12, Height)
    44. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    45. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    46. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    47. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    48. End If
    49. Case MouseState.Over
    50. If _Orientation = Orientation.Horizontal Then
    51. Size = New Size(Width, 12)
    52. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    53. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    54. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    55. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    56. ElseIf _Orientation = Orientation.Vertical Then
    57. Size = New Size(12, Height)
    58. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    59. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    60. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    61. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    62. End If
    63. Case MouseState.None
    64. If _Orientation = Orientation.Horizontal Then
    65. Size = New Size(Width, 6)
    66. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    67. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    68. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    69. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    70. ElseIf _Orientation = Orientation.Vertical Then
    71. Size = New Size(6, Height)
    72. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    73. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    74. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    75. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    76. End If
    77. End Select
    78. End With
    79. End Sub
    80. Protected Overrides Sub OnCreateControl()
    81. MyBase.OnCreateControl()
    82. If _Orientation = Orientation.Horizontal Then
    83. Dock = 0
    84. Size = New Size(350, 6)
    85. Dock = DockStyle.Bottom
    86. ElseIf _Orientation = Orientation.Vertical Then
    87. Dock = 0
    88. Size = New Size(6, 350)
    89. Dock = DockStyle.Right
    90. End If
    91. End Sub
    92. #Region "Propertys"
    93. Enum Orientation
    94. Horizontal = 0
    95. Vertical = 1
    96. End Enum
    97. Private _Orientation As Orientation = Orientation.Horizontal
    98. Public Property Orientatian As Orientation
    99. Get
    100. Return _Orientation
    101. End Get
    102. Set(value As Orientation)
    103. _Orientation = value
    104. If _Orientation = Orientation.Horizontal Then
    105. Dock = 0
    106. Size = New Size(350, 6)
    107. Dock = DockStyle.Bottom
    108. ElseIf _Orientation = Orientation.Vertical Then
    109. Dock = 0
    110. Size = New Size(6, 350)
    111. Dock = DockStyle.Right
    112. End If
    113. Invalidate()
    114. End Set
    115. End Property
    116. Private _Minimum As Integer = 0
    117. Public Property Minimum As Integer
    118. Get
    119. Return _Minimum
    120. End Get
    121. Set(value As Integer)
    122. _Minimum = value
    123. End Set
    124. End Property
    125. Private _Maximum As Integer = 100
    126. Public Property Maximum As Integer
    127. Get
    128. Return _Maximum
    129. End Get
    130. Set(value As Integer)
    131. _Maximum = value
    132. End Set
    133. End Property
    134. Private _Value As Integer
    135. Public Property Value As Integer
    136. Get
    137. Return _Value
    138. End Get
    139. Set(value As Integer)
    140. _Value = value
    141. End Set
    142. End Property
    143. Private _SmallChange As Integer = 1
    144. Public Property SmallChange As Integer
    145. Get
    146. Return _SmallChange
    147. End Get
    148. Set(value As Integer)
    149. _SmallChange = value
    150. End Set
    151. End Property
    152. Private _LargeChange As Integer = 10
    153. Public Property LargeChange As Integer
    154. Get
    155. Return _LargeChange
    156. End Get
    157. Set(value As Integer)
    158. _LargeChange = value
    159. End Set
    160. End Property
    161. #End Region
    162. #Region "Mouse Events"
    163. Private MState As MouseState = MouseState.None
    164. Private Enum MouseState
    165. Over
    166. Down
    167. None
    168. End Enum
    169. Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
    170. MyBase.OnMouseDown(e)
    171. If GRAPHICPART.IsVisible(e.Location) Then
    172. 'Über Thumb Click ^ Hochbewegen mit LargeChange
    173. MState = MouseState.Down : Invalidate()
    174. 'Unter Thumb Click Runter Hochbewegen mit LargeChange
    175. End If
    176. End Sub
    177. Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
    178. MyBase.OnMouseMove(e)
    179. If e.Button = MouseButtons.Left Then
    180. If _Orientation = Orientation.Horizontal Then
    181. Arrangment(CInt(Percentage(CInt(e.X), TRACKrectangle.Width)))
    182. ElseIf _Orientation = Orientation.Vertical Then
    183. Arrangment(CInt(Percentage(CInt(e.Y), TRACKrectangle.Height)))
    184. End If
    185. End If
    186. If GRAPHICPART.IsVisible(e.Location) Then
    187. MState = MouseState.Over : Invalidate()
    188. End If
    189. End Sub
    190. Protected Overrides Sub OnMouseLeave(e As EventArgs)
    191. MyBase.OnMouseLeave(e)
    192. MState = MouseState.None : Invalidate()
    193. End Sub
    194. #End Region
    195. #Region "Helps"
    196. Private Sub Arrangment(Cordinate As Integer)
    197. Value = Cordinate
    198. ThumCordinate = Cordinate
    199. End Sub
    200. Private Shared Function Percentage(Value As Integer, Maximum As Integer) As Integer
    201. Return CInt(Value / Maximum * 100)
    202. End Function
    203. #End Region
    204. End Class


    Gerade beim Überfliegen habe ich noch was geändert, und hatte ich 2 ideen... in der OnPaint ... Ist es unnötig TRACKrectangle so Oft zu laden & Ich hatte die idee die TRACKrectangle direkt in Prozent also Height Oda(je nach Orientierung..) Weight in Prozent zumachen... ich schaue später mal ob es etwas bringt... für jede weitere Hilfe, Idee wäre ich DankBar ^^
    @Baa$ Dein OnMouseMove() ist falsch.
    Du darfst da nicht Percentage() ausrechnen, sondern musst die MouseKoordinate direkt verwenden.
    Nun, da Percentage() vom Typ Integer ist, ist eine CInt()-Konvertierung beim Aufruf nicht erforderlich.
    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!
    @Baa$ Bei MouseDown merkst Du Dir die Start-Koordinate und diese ziehst Du bei MouseMove von der aktuellen Koordinate ab, da hast Du die 0-basierte Differenz zur Ausgangslage.
    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!
    also irgendwie raffe ich es nicht ganz, ist es normal das sich die Koordinate bei Mouse Down bei jedem Programm Start verändert? und muss wenn es so laufen sollte wie du meinst hinter her nicht die Thumb Position nicht 0 ergeben... kp ob ich jetzt bloedsinn rede... eventuell verstehst du ja was ich meine schau mal in mein Code...
    soweit habe ich es hinbekommen.. was mich allerdings noch gravierend stört ist das jetzt das obere ende der Thumb Rectangle die Value ergibt... wenn ich aber zum ende Hinscrolle sollte aber die untere ende die Value ergeben sonst geht die Rechnung für mich nicht auf... und was mir noch aufgefallen ist wenn ich mal rechne verspringt die Mouse immer (was auch logisch irgendwo ist..) aber ohne mal rechnen wüsste ich jetzt nicht wie ich das rechnen sollte ohne +++++ oder ------- hinterer zuhaben...

    'die Messagebox habe ich zum Test drin gehabt... fürs Debuggen

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
    2. MyBase.OnMouseDown(e)
    3. If e.Button = MouseButtons.Left Then
    4. If FirstTotch = True Then
    5. ZeroPoint = e.Y * 2 + ThumbSize
    6. FirstTotch = False
    7. Else : End If
    8. End If
    9. If TrackPART.IsVisible(e.Location) Then
    10. MState = MouseState.Down : Invalidate()
    11. End If
    12. End Sub
    13. Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
    14. MyBase.OnMouseMove(e)
    15. If e.Button = MouseButtons.Left Then
    16. Handling(e)
    17. Invalidate()
    18. End If
    19. If ThumbPART.IsVisible(e.Location) Then
    20. MState = MouseState.Over : Invalidate()
    21. End If
    22. If TrackPART.IsVisible(e.Location) Then
    23. MState = MouseState.Over : Invalidate()
    24. End If
    25. End Sub
    26. Protected Overrides Sub OnMouseLeave(e As EventArgs)
    27. MyBase.OnMouseLeave(e)
    28. MState = MouseState.None : Invalidate()
    29. End Sub
    30. #End Region
    31. #Region "Scroll Actions"
    32. Private Sub Handling(e As MouseEventArgs)
    33. Value = ThumbSize + e.Y - ZeroPoint
    34. ThumbPosition = ThumbSize + e.Y - ZeroPoint
    35. If ThumbPosition = Track.Height Then
    36. MessageBox.Show("!")
    37. End If
    38. End Sub


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

    Baa$ schrieb:

    ist es normal das sich die Koordinate bei Mouse Down bei jedem Programm Start verändert?
    Klar.
    Es sei denn, Du erwischst jedes Mal dasselbe Pixel auf Deinem Control.
    Ich seh es mir mal an.
    ====
    @Baa$ Überzeuge Dich, dass der neue Code im alten Code compiliert.
    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“ ()

    Hatte was Falsch Kopiert sorry.... Aber dafür bin ich weiter gekommen habe einige Probleme gelöst bekommen Wenn ich Zuhause bin Poste ich Mal die Source..



    Hab gerade MittagsPause :P
    ich denke ich bin zu 95% durch mit der ScrollBar!
    Was noch Fehlt!
    LargeChange einbauen beim Klick auf TrackRectangle....
    und LargeChange bei Knopfdruck Down/UP/PageUp/PageDown...
    und dann Minimum und Maximum einbinden!
    ich denke dann dürfte ich durch damit sein?? oder fällt euch noch etwas ein??

    und eine Sache ist mir aufgefallen ich habe zum vergleich mal die Microsoft Scrollbars getestet und bei macht die bei Minimum 0 Maximum 100 geht sie nur bis value 90
    gibt es dafür einen Grund? oder habe ich da was verpennt.... ?? habe es bei mir anders gelöst...

    Wenn ich durch mit meinem Projekt bin Poste ich hier mal einige meiner Controls habe nämlich Fleißig Programmiert das Letzte Jahr... :D

    @RodFromGermany hier die Source... kannst ja mal rüber schauen und was dazu sagen würd mich freuen :)

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Drawing.Drawing2D
    3. Public Class ScrollBar
    4. Inherits Control
    5. #Region "Events"
    6. Public Event Scroll()
    7. Public Event ValueChanged(Value As Integer)
    8. #End Region
    9. #Region "Declares"
    10. Private ThumCordinate As Integer = 0
    11. Private TRACKrectangle As Rectangle
    12. Private THUMBrectangle As Rectangle
    13. Private ReadOnly THUMBsize As Integer = 100
    14. Private ReadOnly GRAPHICPART As New GraphicsPath
    15. #End Region
    16. Sub New()
    17. SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    18. SetStyle(ControlStyles.UserPaint, True)
    19. SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    20. SetStyle(ControlStyles.ResizeRedraw, True)
    21. DoubleBuffered = True
    22. UpdateStyles()
    23. End Sub
    24. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    25. MyBase.OnPaint(e)
    26. GRAPHICPART.Reset()
    27. GRAPHICPART.AddRectangle(TRACKrectangle)
    28. With e.Graphics
    29. Select Case MState
    30. Case MouseState.Down
    31. If _Orientation = Orientation.Horizontal Then
    32. Size = New Size(Width, 12)
    33. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    34. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    35. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    36. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    37. ElseIf _Orientation = Orientation.Vertical Then
    38. Size = New Size(12, Height)
    39. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    40. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    41. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    42. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    43. End If
    44. Case MouseState.Over
    45. If _Orientation = Orientation.Horizontal Then
    46. Size = New Size(Width, 12)
    47. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    48. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    49. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    50. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    51. ElseIf _Orientation = Orientation.Vertical Then
    52. Size = New Size(12, Height)
    53. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    54. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    55. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    56. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    57. End If
    58. Case MouseState.None
    59. If _Orientation = Orientation.Horizontal Then
    60. Size = New Size(Width, 6)
    61. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    62. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    63. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    64. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    65. ElseIf _Orientation = Orientation.Vertical Then
    66. Size = New Size(6, Height)
    67. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    68. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    69. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    70. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    71. End If
    72. End Select
    73. End With
    74. End Sub
    75. Protected Overrides Sub OnCreateControl()
    76. MyBase.OnCreateControl()
    77. If _Orientation = Orientation.Horizontal Then
    78. Dock = DockStyle.None
    79. Size = New Size(350, 6)
    80. Dock = DockStyle.Bottom
    81. ElseIf _Orientation = Orientation.Vertical Then
    82. Dock = DockStyle.None
    83. Size = New Size(6, 350)
    84. Dock = DockStyle.Right
    85. End If
    86. End Sub
    87. #Region "Propertys"
    88. Enum Orientation
    89. Horizontal = 0
    90. Vertical = 1
    91. End Enum
    92. Private _Orientation As Orientation = Orientation.Horizontal
    93. Public Property Orientatian As Orientation
    94. Get
    95. Return _Orientation
    96. End Get
    97. Set(value As Orientation)
    98. _Orientation = value
    99. If _Orientation = Orientation.Horizontal Then
    100. Dock = DockStyle.None
    101. Size = New Size(350, 6)
    102. Dock = DockStyle.Bottom
    103. ThumCordinate = 0
    104. _Value = 0
    105. ElseIf _Orientation = Orientation.Vertical Then
    106. Dock = DockStyle.None
    107. Size = New Size(6, 350)
    108. Dock = DockStyle.Right
    109. ThumCordinate = 0
    110. _Value = 0
    111. End If
    112. Invalidate()
    113. End Set
    114. End Property
    115. Private _Minimum As Integer = 0
    116. Public Property Minimum As Integer
    117. Get
    118. Return _Minimum
    119. End Get
    120. Set(value As Integer)
    121. _Minimum = value
    122. End Set
    123. End Property
    124. Private _Maximum As Integer = 100
    125. Public Property Maximum As Integer
    126. Get
    127. Return _Maximum
    128. End Get
    129. Set(value As Integer)
    130. _Maximum = value
    131. End Set
    132. End Property
    133. Private _Value As Integer
    134. Public Property Value As Integer
    135. Get
    136. Return _Value
    137. End Get
    138. Set(value As Integer)
    139. _Value = value
    140. RaiseEvent ValueChanged(value)
    141. Invalidate()
    142. End Set
    143. End Property
    144. Private _SmallChange As Integer = 1
    145. Public Property SmallChange As Integer
    146. Get
    147. Return _SmallChange
    148. End Get
    149. Set(value As Integer)
    150. _SmallChange = value
    151. End Set
    152. End Property
    153. Private _LargeChange As Integer = 10
    154. Public Property LargeChange As Integer
    155. Get
    156. Return _LargeChange
    157. End Get
    158. Set(value As Integer)
    159. _LargeChange = value
    160. End Set
    161. End Property
    162. #End Region
    163. #Region "Mouse Events"
    164. Private MState As MouseState = MouseState.None
    165. Private Enum MouseState
    166. Over
    167. Down
    168. None
    169. End Enum
    170. Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
    171. MyBase.OnMouseDown(e)
    172. If GRAPHICPART.IsVisible(e.Location) Then
    173. MState = MouseState.Down : Invalidate() 'Größe ändert sich von 6 zu 12
    174. End If
    175. End Sub
    176. Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
    177. MyBase.OnMouseMove(e)
    178. If e.Button = MouseButtons.Left Then
    179. If _Orientation = Orientation.Horizontal Then
    180. If e.X < 0 Then
    181. ElseIf e.X > TRACKrectangle.Width - THUMBsize Then
    182. Else
    183. Value = Percentage(e.X, TRACKrectangle.Width - THUMBsize)
    184. ThumCordinate = e.X
    185. RaiseEvent Scroll()
    186. End If
    187. Invalidate()
    188. ElseIf _Orientation = Orientation.Vertical Then
    189. If e.Y < 0 Then
    190. ElseIf e.Y > TRACKrectangle.Height - THUMBsize Then
    191. Else
    192. Value = Percentage(e.Y, TRACKrectangle.Height - THUMBsize)
    193. ThumCordinate = e.Y
    194. RaiseEvent Scroll()
    195. End If
    196. Invalidate()
    197. End If
    198. End If
    199. If GRAPHICPART.IsVisible(e.Location) Then
    200. MState = MouseState.Over : Invalidate()
    201. End If
    202. End Sub
    203. Protected Overrides Sub OnMouseLeave(e As EventArgs)
    204. MyBase.OnMouseLeave(e)
    205. MState = MouseState.None : Invalidate()
    206. End Sub
    207. #End Region
    208. #Region "Helps"
    209. Private Shared Function Percentage(Value As Integer, Maximum As Integer) As Integer
    210. Return CInt(Value / Maximum * 100)
    211. End Function
    212. #End Region
    213. End Class


    Beiträge zusammengefügt. ~Thunderbolt

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

    @Takafusa

    Wenn ich das Richtig verstanden habe meinst du das die Thumb sich verkleinert je nach dem wiviel in zb einer Liste vorhanden ist???

    Wenn ich das richtig verstanden habe wie das Funktioniert.... Kommt das beim einbinden in ein Control zum Tragen und wird dort erst abgewickelt...
    Standart Mässig ist die Thumb fest bei den ScrollBars die ich bisher gesehen habe...

    Die rechnung funktioniert reintheoretisch mit jegweder Thumbgroße kannst sie ja Mal manuell auf 50 oder anders stellen...
    Ich habs nicht getestet, nur einmal im Code geschaut. Falls du das reinmachen willst, so kannst du bei einer Vertikalen Scrollbar die Thumb-Länge errechnen, ist dann genau so groß wie bei den originalen Scrollbars. Wie es bei einer horizontalen geht sollte ersichtlich sein. Wenn du aber anderen größen bei den "Arrows" hast, passt der Wert aus SystemInformation... natürlich nicht.

    C#-Quellcode

    1. int thumbLen = Height - (2 * SystemInformation.VerticalScrollBarArrowHeight);
    2. thumbLen = thumbLen * LargeChange / ((Maximum - Minimum) + 1);

    Das wird so nicht funktionieren... Mal und Geteilt würde das Thumb Springen lassen... Ausserdem habe ich das Control ja für ein anderes Control von mir gebaut...

    Ähm kopierst du einfach nur irgendwo irgendwelche Source raus oder verstehst du auch was du dort kopierst?

    Das was ich für mich daraus an sinnvollem entnehmen kann ist das ich das Thumb einfach Summa summaru aus Minimum und Maximum errechnen lassen könnte...
    Aber ob das wirklich sinnvoll ist muss ich später Mal nachschauen... Danke für die idee die ich durch deinen Code habe... Aber so wie dein Code ist würde es bei mir nicht funktionieren und nicht nur weil in Csharp...
    Ich werde es die Tage sehen wenn ich die scrollbar in mein anderes Control einbauen werde...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Baa$“ ()

    Dieser Code ist aus meiner eigenen ScrollBar, ich kopiere in den seltesten Fällen. Kann schneller schreiben als Source zum kopieren suchen und dann kopieren, wollte dir nur zeigen wie du die Grösse des Thumbs, wie bei den original Scrollbars hinbekommst. Aber nach dem Kommentar, werde ich mich mit gut gemeinten Tipps bei dir zurückhalten. Bei mir springt jedenfalls nichts und meine Scrollbar verhält sich exakt wie die originalen.
    @Baa$ Die Funktionalität ist nun wesentlich freundlicher.
    Den Code schau ich mir mal in Ruhe an.
    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!
    So habe wieder Paar sachen hinzugefügt!
    1.Was jetzt noch Fehlt in meinen Augen ist PageUP/PageDown & UP/Down Knopf SmallChange hinzuzufügen.
    2.Mouse Weel (Mouse Rad) Scrolling hinzufügen... da bin ich mir aber noch nicht so sicher ob Smallchange oder Largechange nutzen soll denke aber smallchange...
    3.Minimum & Maximum einbinden... habe einen Teil schon gemacht feht nur nur noch meiner meinung Kleinigkeit...
    4.Seht ihr irgendwas was noch fehlt ?

    Denke Morgen Höchstens Ende der Woche ist das Kontroll dann fertig... ist jetzt wirklich das Schlimmste Geschafft ^^ :D
    Hier die Source zum Control soweit ich bisher gekommen bin!..

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Drawing.Drawing2D
    3. Public Class ScrollBars
    4. Inherits Control
    5. #Region "Events"
    6. Public Event Scroll()
    7. Public Event ValueChanged(Value As Integer)
    8. #End Region
    9. #Region "Declares"
    10. Private ThumCordinate As Integer = 0
    11. Private TRACKrectangle As Rectangle
    12. Private THUMBrectangle As Rectangle
    13. Private THUMBsize As Integer = Maximum - Minimum
    14. Private ThumbPath As New GraphicsPath
    15. Private TrackPath As New GraphicsPath
    16. Private ThumbClick As Boolean = False
    17. Private TrackClick As Boolean = False
    18. #End Region
    19. Sub New()
    20. SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    21. SetStyle(ControlStyles.UserPaint, True)
    22. SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    23. SetStyle(ControlStyles.ResizeRedraw, True)
    24. DoubleBuffered = True
    25. UpdateStyles()
    26. End Sub
    27. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    28. MyBase.OnPaint(e)
    29. ThumbPath.Reset()
    30. TrackPath.Reset()
    31. ThumbPath.AddRectangle(THUMBrectangle)
    32. TrackPath.AddRectangle(TRACKrectangle)
    33. THUMBsize = Maximum - Minimum
    34. With e.Graphics
    35. Select Case MState
    36. Case MouseState.Down
    37. If _Orientation = Orientation.Horizontal Then
    38. Size = New Size(Width, 12)
    39. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    40. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    41. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    42. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    43. ElseIf _Orientation = Orientation.Vertical Then
    44. Size = New Size(12, Height)
    45. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    46. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    47. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    48. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    49. End If
    50. Case MouseState.Over
    51. If _Orientation = Orientation.Horizontal Then
    52. Size = New Size(Width, 12)
    53. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    54. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    55. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    56. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    57. ElseIf _Orientation = Orientation.Vertical Then
    58. Size = New Size(12, Height)
    59. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    60. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    61. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    62. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    63. End If
    64. Case MouseState.None
    65. If _Orientation = Orientation.Horizontal Then
    66. Size = New Size(Width, 6)
    67. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    68. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    69. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    70. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    71. ElseIf _Orientation = Orientation.Vertical Then
    72. Size = New Size(6, Height)
    73. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    74. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    75. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    76. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    77. End If
    78. End Select
    79. End With
    80. End Sub
    81. Protected Overrides Sub OnCreateControl()
    82. MyBase.OnCreateControl()
    83. If _Orientation = Orientation.Horizontal Then
    84. Dock = DockStyle.None
    85. Size = New Size(350, 6)
    86. Dock = DockStyle.Bottom
    87. ElseIf _Orientation = Orientation.Vertical Then
    88. Dock = DockStyle.None
    89. Size = New Size(6, 350)
    90. Dock = DockStyle.Right
    91. End If
    92. End Sub
    93. #Region "Propertys"
    94. Enum Orientation
    95. Horizontal = 0
    96. Vertical = 1
    97. End Enum
    98. Private _Orientation As Orientation = Orientation.Horizontal
    99. Public Property Orientatian As Orientation
    100. Get
    101. Return _Orientation
    102. End Get
    103. Set(value As Orientation)
    104. _Orientation = value
    105. If _Orientation = Orientation.Horizontal Then
    106. Dock = DockStyle.None
    107. Size = New Size(350, 6)
    108. Dock = DockStyle.Bottom
    109. ThumCordinate = 0
    110. _Value = 0
    111. ElseIf _Orientation = Orientation.Vertical Then
    112. Dock = DockStyle.None
    113. Size = New Size(6, 350)
    114. Dock = DockStyle.Right
    115. ThumCordinate = 0
    116. _Value = 0
    117. End If
    118. Invalidate()
    119. End Set
    120. End Property
    121. Private _Minimum As Integer = 0
    122. Public Property Minimum As Integer
    123. Get
    124. Return _Minimum
    125. End Get
    126. Set(value As Integer)
    127. _Minimum = value
    128. 'If _Minimum < Maximum Then
    129. 'Maximum = _Minimum
    130. 'End If
    131. Invalidate()
    132. End Set
    133. End Property
    134. Private _Maximum As Integer = 100
    135. Public Property Maximum As Integer
    136. Get
    137. Return _Maximum
    138. End Get
    139. Set(value As Integer)
    140. _Maximum = value
    141. 'If _Maximum < Minimum Then
    142. 'Minimum = _Maximum
    143. 'End If
    144. Invalidate()
    145. End Set
    146. End Property
    147. Private _Value As Integer
    148. Public Property Value As Integer
    149. Get
    150. Return _Value
    151. End Get
    152. Set(value As Integer)
    153. _Value = value
    154. 'If _Value < Maximum Then
    155. ' _Value = Maximum
    156. 'ElseIf _Value > Minimum Then
    157. ' _Value = Minimum
    158. 'End If
    159. RaiseEvent ValueChanged(value)
    160. Invalidate()
    161. End Set
    162. End Property
    163. Private _SmallChange As Integer = 1
    164. Public Property SmallChange As Integer
    165. Get
    166. Return _SmallChange
    167. End Get
    168. Set(value As Integer)
    169. _SmallChange = value
    170. Invalidate()
    171. End Set
    172. End Property
    173. Private _LargeChange As Integer = 10
    174. Public Property LargeChange As Integer
    175. Get
    176. Return _LargeChange
    177. End Get
    178. Set(value As Integer)
    179. _LargeChange = value
    180. Invalidate()
    181. End Set
    182. End Property
    183. #End Region
    184. #Region "Mouse Events"
    185. Private MState As MouseState = MouseState.None
    186. Private Enum MouseState
    187. Over
    188. Down
    189. None
    190. End Enum
    191. Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
    192. MyBase.OnMouseDown(e)
    193. If ThumbPath.IsVisible(e.Location) Then
    194. ThumbClick = True
    195. End If
    196. If TrackPath.IsVisible(e.Location) Then
    197. TrackClick = True
    198. MState = MouseState.Down : Invalidate() 'Größe ändert sich von 6 zu 12
    199. End If
    200. End Sub
    201. Protected Overrides Sub OnMouseClick(e As MouseEventArgs)
    202. MyBase.OnMouseClick(e)
    203. If TrackClick = Enabled Then
    204. If _Orientation = Orientation.Horizontal Then
    205. If e.X < ThumCordinate Then
    206. If e.X < Minimum OrElse e.X = Minimum Then
    207. 'ElseIf e.X > TRACKrectangle.Width - THUMBsize Then
    208. ThumCordinate = 0
    209. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    210. RaiseEvent Scroll()
    211. Else
    212. ThumCordinate -= Change(TRACKrectangle.Width - THUMBsize, LargeChange)
    213. If Value > Maximum Then
    214. Value = Maximum
    215. Else
    216. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    217. RaiseEvent Scroll()
    218. End If
    219. End If
    220. Else
    221. If e.X < TRACKrectangle.Width OrElse e.X = Minimum Then
    222. If e.X > TRACKrectangle.Width - THUMBsize Then
    223. ThumCordinate = TRACKrectangle.Width - THUMBsize
    224. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    225. RaiseEvent Scroll()
    226. Else
    227. ThumCordinate += Change(TRACKrectangle.Width - THUMBsize, LargeChange)
    228. If Value < Minimum Then
    229. Value = Minimum
    230. RaiseEvent Scroll()
    231. Else
    232. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    233. RaiseEvent Scroll()
    234. End If
    235. End If
    236. End If
    237. End If
    238. ElseIf _Orientation = Orientation.Vertical Then
    239. If e.Y < ThumCordinate Then
    240. If e.Y < Minimum OrElse e.Y = Minimum Then
    241. 'ElseIf e.X > TRACKrectangle.Width - THUMBsize Then
    242. ThumCordinate = 0
    243. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    244. RaiseEvent Scroll()
    245. Else
    246. ThumCordinate -= Change(TRACKrectangle.Width - THUMBsize, LargeChange)
    247. If Value > Maximum Then
    248. Value = Maximum
    249. Else
    250. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    251. RaiseEvent Scroll()
    252. End If
    253. End If
    254. Else
    255. If e.Y < TRACKrectangle.Width OrElse e.Y = Minimum Then
    256. If e.Y > TRACKrectangle.Width - THUMBsize Then
    257. ThumCordinate = TRACKrectangle.Width - THUMBsize
    258. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    259. RaiseEvent Scroll()
    260. Else
    261. ThumCordinate += Change(TRACKrectangle.Width - THUMBsize, LargeChange)
    262. If Value < Minimum Then
    263. Value = Minimum
    264. RaiseEvent Scroll()
    265. Else
    266. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    267. RaiseEvent Scroll()
    268. End If
    269. End If
    270. End If
    271. End If
    272. End If
    273. End If
    274. End Sub
    275. Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
    276. MyBase.OnMouseMove(e)
    277. If ThumbClick = True Then
    278. If _Orientation = Orientation.Horizontal Then
    279. If e.X < Minimum Then
    280. ElseIf e.X > TRACKrectangle.Width - THUMBsize Then
    281. Else
    282. ThumCordinate = e.X
    283. Value = Percentage(e.X, TRACKrectangle.Width - THUMBsize)
    284. RaiseEvent Scroll()
    285. End If
    286. Invalidate()
    287. ElseIf _Orientation = Orientation.Vertical Then
    288. If e.Y < Minimum Then
    289. ElseIf e.Y > TRACKrectangle.Height - THUMBsize Then
    290. Else
    291. ThumCordinate = e.Y
    292. Value = Percentage(e.Y, TRACKrectangle.Height - THUMBsize)
    293. RaiseEvent Scroll()
    294. End If
    295. Invalidate()
    296. End If
    297. End If
    298. If TrackPath.IsVisible(e.Location) Then
    299. MState = MouseState.Over : Invalidate()
    300. End If
    301. If ThumbPath.IsVisible(e.Location) Then
    302. MState = MouseState.Over : Invalidate()
    303. End If
    304. End Sub
    305. Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
    306. MyBase.OnMouseUp(e)
    307. TrackClick = False
    308. ThumbClick = False
    309. End Sub
    310. Protected Overrides Sub OnMouseLeave(e As EventArgs)
    311. MyBase.OnMouseLeave(e)
    312. MState = MouseState.None : Invalidate()
    313. End Sub
    314. #End Region
    315. #Region "Helps"
    316. Private Shared Function Percentage(Value As Integer, Maximum As Integer) As Integer
    317. Return CInt(Value / Maximum * 100)
    318. End Function
    319. Private Shared Function Change(Chang As Integer, Cordinate As Integer) As Integer
    320. Return CInt(Chang * Cordinate / 100)
    321. End Function
    322. #End Region
    323. End Class


    #Nachtrag sehe gerade Vertical bei LargeChanges sind noch Bugs... und Bei Click Largechange geht sie noch ins - und +... fixe ich dann die tage noch