Leider ist das Slider-Steuerelement aus den Microsoft Common Controls etwas einseitig veranlagt - es besteht darauf, dass der minimale Wert oben bzw. links zu sein habe. Aber gerade beim vertikalen Einsatz eines Schiebereglers ist man eigentlich gewohnt, den minimalen Wert unten vorzufinden und nach oben hin "aufzudrehen". Im Gegensatz zu den Scrollbars können Sie das Slider-Steuerelement jedoch nicht einfach dadurch überlisten, indem Sie die Werte der Min- und Max-Eigenschaften vertauschen.
Die Klasse clsReverseSlider sorgt für eine Umkehrung der Werte, indem sie automatisch den aktuellen Wert vom Max-Wert abzieht und somit den eigentlich gewünschten Wert der umgekehrten Orientierung liefert. Bis auf einen kleinen Schönheitsfehler funktioniert das prächtig: Nur die im Slider eingebaute automatische ToolTip-Anzeige des aktuellen Wertes klebt nach wie vor an der ursprünglichen Orientierung. Die einfachste Abhilfe ist, diese Anzeige einfach abzuschalten und auf Wunsch (Eigenschaft AutoToolTip der Klasse) in die normale, von Visual Basic selbst verwaltete ToolTipText-Eigenschaft zu verlagern. Das sieht zwar nicht ganz so elegant aus, wie das Slider-Original - aber darum können Sie das ja über die Eigenschaft AutoToolTipp der Klasse abschalten.
Sie legen im Modul des Forms, auf dem der Slider platziert werden soll, eine Objekt-Variable des Typs clsReverseSlider an und weisen ihr, beispielsweise im Form_Load-Ereignis, eine Instanz der Klasse zu. Dann rufen Sie deren Init-Methode auf und übergeben ihr als ersten Parameter den betreffenden Slider. Im zweiten, optionalen Parameter AutoToolTip können Sie die erwähnte Anzeige des aktuellen Slider-Wertes unterbinden, indem Sie False übergeben. Voreingestellt ist True. Im Code der Init-Methode wird der Wert der Value-Eigenschaft auch gleich auf die umgekehrten Verhältnisse umgestellt.
Sie können die Eigenschaften Max, Min und Value wie gewohnt im Design-Modus setzen. Damit Sie in Ihrem weiteren Code nicht mit zwei verschiedenen Objekt-Zugriffen hantieren müssen, reicht die Klasse die wichtigsten Eigenschaften des Sliders direkt durch und stellt auch die beiden Ereignisse Change und Scroll zur Verfügung. Die Eigenschaften Max, Min und Value der Klasse geben automatisch die Werte der Umkehrung zurück. Direkten Zugriff auf den Slider selbst erhalten Sie über die Eigenschaft Slider.
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Public Event Change()
Public Event Scroll()
Private WithEvents eSlider As Slider
Private pAutoToolTip As Boolean
Public Property Get Max() As Long
Max = eSlider.Min
End Property
Public Property Let Max(New_Max As Long)
eSlider.Min = New_Max
End Property
Public Property Get Min() As Long
Min = eSlider.Max
End Property
Public Property Let Min(New_Min As Long)
eSlider.Max = New_Min
End Property
Public Property Get AutoToolTip() As Boolean
AutoToolTip = pAutoToolTip
End Property
Public Property Let AutoToolTip(New_AutoToolTip As Boolean)
pAutoToolTip = New_AutoToolTip
End Property
Public Property Get Slider() As Slider
Set Slider = eSlider
End Property
Public Property Get Value() As Long
With eSlider
Value = .Max - .Value
End With
End Property
Public Property Let Value(New_Value As Long)
With eSlider
.Value = .Max - New_Value
End With
End Property
Public Function Init(Slider As Slider, _
Optional ByVal AutoToolTip As Boolean = True) As Long
Const TBM_SETTOOLTIPS = &H41D
Set eSlider = Slider
pAutoToolTip = AutoToolTip
With eSlider
SendMessage .hwnd, TBM_SETTOOLTIPS, 0, 0
.Value = .Max - .Value
Init = .Max - .Value
End With
zAutoToolTip
End Function
Private Sub eSlider_Click()
zAutoToolTip
RaiseEvent Change
End Sub
Private Sub eSlider_Scroll()
zAutoToolTip
RaiseEvent Scroll
End Sub
Private Sub zAutoToolTip()
If pAutoToolTip Then
With eSlider
.ToolTipText = .Max - .Value
End With
End If
End Sub
|