|
Die Breiten und Höhen von Bildlaufleisten (ScrollBars) sollten
auch in Ihren eigenen Anwendungen immer den Systemeinstellungen
entsprechen. Leider bieten die Visual Basic-eigenen Steuerelemente
HScrollBar und VScrollBar keine eingebaute Mögilchkeit, sich
automatisch auf diese Größen einzustellen und bei Änderungen
durch den Anwender auch nachträglich darauf einzustellen.
Die im System eingestellten Größen erhalten Sie über Aufrufe
der API-Funktion GetSystemMetrics,
denen die Kennungen SM_CYHSCROLL für die Höhe einer horizontalen
und SM_CXVSCROLL für die Breite einer vertikalen Bildlaufleiste als
Parameter übergeben werden. Wie bei API-Funktionen üblich,
erhalten Sie diese Größen in der Maßeinheit Pixels.
Private Declare Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As Long) As Long
Private Const SM_CYHSCROLL = 3
Private Const SM_CXVSCROLL = 2
ScrollBarHeight = GetSystemMetrics(SM_CYHSCROLL)
ScrollBarWidth = GetSystemMetrics(SM_CXVSCROLL)
Mittels der Methoden ScaleX
und ScaleY eines Containers (Forms, UserControls usw.) können
Sie die Größen auch gleich dessen Maßeinheit ( ScaleMode)
umrechnen lassen, beispielsweise in einem Form:
With Me
ScrollBarHeight = .ScaleY(GetSystemMetrics(SM_CYHSCROLL), _
vbPixels, .ScaleMode)
ScrollBarWidth = .ScaleY(GetSystemMetrics(SM_CXVSCROLL), _
vbPixels, .ScaleMode)
End With
In praktische Funktionen verpackt sieht das so aus:
Private Declare Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As Long) As Long
Public Function HScrollBarSysHeight(Container As Object, _
Optional ScaleMode As Integer) As Single
Const SM_CYHSCROLL = 3
With Container
If ScaleMode = 0 Then
HScrollBarSysHeight = .ScaleY(GetSystemMetrics(SM_CYHSCROLL), _
vbPixels, .ScaleMode)
Else
HScrollBarSysHeight = .ScaleY(GetSystemMetrics(SM_CYHSCROLL), _
vbPixels, ScaleMode)
End If
End With
End Function
Public Function VScrollBarSysWidth(Container As Object, _
Optional ScaleMode As Integer) As Single
Const SM_CXVSCROLL = 2
With Container
If ScaleMode = 0 Then
VScrollBarSysWidth = .ScaleX(GetSystemMetrics(SM_CXVSCROLL), _
vbPixels, .ScaleMode)
Else
VScrollBarSysWidth = .ScaleX(GetSystemMetrics(SM_CXVSCROLL), _
vbPixels, ScaleMode)
End If
End With
End Function
 |
Über diese Funktionen erfahren Sie die
Systemgrößen der Bildlaufleisten

|
Sie übergeben diesen Funktionen im ersten Parameter eine
Referenz auf den betreffenden Container und erhalten die jeweilige
Größe in der Maßeinheit dieses Containers oder in der optional im
zweiten Parameter angebbaren Maßeinheit zurück.
Eine Änderung der Bildlaufleisten-Größen durch den Anwender
können Sie mit einem einfachen Kniff jederzeit in Erfahrung
bringen, selbst wenn Ihre Anwendung läuft, ohne ein gesondertes
Steuerelement wie das SysInfo-Steuerelement
verwenden zu müssen. Da die beiden Funktions-Aufrufe kaum ins
Gewicht fallen, können Sie diese auch aus dem Paint-Ereignis des
Containers heraus aufrufen. Sie werden dann zwar jedes Mal
aufgerufen, wenn der Container neu dargestellt wird, aber eben auch
dann, wenn gerade die Systemeinstellungen geändert worden sind.
|