Die reine Höhe der Titelzeile eines Forms lässt sich aus den von Visual Basic gelieferten Informationen (Eigenschaften des Forms usw.) nicht solide und zuverlässig ermitteln. Doch die API-Funktion GetSystemMetrics liefert die in den Bildschirmeigenschaften eingestellte Höhe der normalen Titelzeile oder der Titelzeile eines Werkzeugfensters unter Angabe der Index-Konstanten SM_CYCAPTION bzw. SM_CYSMCAPTION.
Da die API-Funktion GetSystemMetrics die Werte immer in der Maßeinheit Pixels zurückgibt, erledigen die beiden folgenden Funktionen CaptionHeight und SmallCaptionHeight gleich die Umrechnung in TWIPS. Dazu lassen Sie einfach die Angabe im optionalen Parameter ScaleMode weg, oder geben die Enumerationskonstante chTwips an (deren Wert identisch zu der VB-eigenen Konstante vbTwips ist). Möchten Sie den Wert doch lieber in Pixels erhalten, geben Sie chPixels (gleichfalls identisch zu vbPixels) an.
Private Declare Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As Long) As Long
Public Enum CaptionHeightScaleModeConstants
chTwips = vbTwips
chPixels = vbPixels
End Enum
Public Function CaptionHeight(Optional ByVal ScaleMode _
As CaptionHeightScaleModeConstants = chTwips) As Single
Const SM_CYCAPTION = 4
Select Case ScaleMode
Case 0, chTwips
CaptionHeight = GetSystemMetrics(SM_CYCAPTION) _
* Screen.TwipsPerPixelY
Case chPixels
CaptionHeight = GetSystemMetrics(SM_CYCAPTION)
Case Else
Err.Raise 5
End Select
End Function
Public Function SmallCaptionHeight(Optional ByVal ScaleMode _
As CaptionHeightScaleModeConstants = chTwips) As Single
Const SM_CYSMCAPTION = 51
Select Case ScaleMode
Case 0, chTwips
SmallCaptionHeight = GetSystemMetrics(SM_CYSMCAPTION) _
* Screen.TwipsPerPixelY
Case chPixels
SmallCaptionHeight = GetSystemMetrics(SM_CYSMCAPTION)
Case Else
Err.Raise 5
End Select
End Function
Möchten Sie die Höhe der Titelzeile eines gegebenen Forms ermitteln, können Sie selbst anhand der BorderStyle-Eigenschaft dieses Forms feststellen, ob es sich um ein normales Fenster oder um ein Werkzeugfenster mit schmaler Titelzeile handelt. Sie können aber auch die folgende Funktion GetCaptionHeight verwenden, die diese Ermittlung für Sie vornimmt. Auch hier können Sie wieder die gewünschte Maßeinheit über den Parameter ScaleMode wählen.
Beachten Sie, dass die Funktion immer den Standardwert der Titelzeile für den entsprechenden Form-Typ zurückgibt, unabhängig davon, ob diese tatsächlich sichtbar ist oder nicht.
Public Function GetCaptionHeight(Form As Form, _
Optional ByVal ScaleMode _
As CaptionHeightScaleModeConstants = chTwips) As Single
Select Case Form.BorderStyle
Case vbFixedToolWindow, vbSizableToolWindow
GetCaptionHeight = SmallCaptionHeight(ScaleMode)
Case Else
GetCaptionHeight = CaptionHeight(ScaleMode)
End Select
End Function
|