Individuelle Ausrichtung für Steuerelement-Beschriftungen

Veröffentlicht: 24. Feb 2002 | Aktualisiert: 16. Jun 2004

Von Mathias Schiffer

Die Steuerelemente CommandButton (Befehlsschaltfläche), OptionButton (Optionsschaltfläche), CheckBox (Kontrollkästchen) und Frame (Rahmen) geben sich unter Visual Basic restriktiv, was eine Ausrichtung ihrer vorgesehenen Beschriftung über ihre Caption-Eigenschaft angeht: Die Positionierung der Beschriftungen übernimmt Visual Basic, ohne Ihnen eine weitere Einflussmöglichkeit zu gewähren.

Dabei sind die Windows-Steuerelemente, die diesen Visual Basic-Steuerelementen zugrunde liegen, durchaus in der Lage, die Ausrichtung ihrer Beschriftung flexibler zu handhaben. Wie so oft verhilft ein Griff in die Trickkiste des Windows API, um auch Visual Basic zur entsprechenden Kooperation zu bewegen.

Fügen Sie hierfür in das Codemodul einer Form, deren Steuerelemente Sie entsprechend beeinflussen möchten, den folgenden Code hinzu:

Public Enum CustomAlignment 
  caTop = &H400&        ' = BS_TOP 
  caBottom = &H800&     ' = BS_BOTTOM 
  caLeft = &H100&       ' = BS_LEFT 
  caRight = &H200&      ' = BS_RIGHT 
  caCenterVert = &HC00& ' = BS_VCENTER 
  caCenterHorz = &H300& ' = BS_CENTER 
End Enum 
Private Const CustomAlignAll As Long = caTop + caBottom + _ 
                                       caLeft + caRight + _ 
                                       caCenterVert + caCenterHorz 
Private Const GWL_STYLE As Long = -16& 
Private Declare Function GetWindowLong _ 
  Lib "user32" Alias "GetWindowLongA" ( _ 
  ByVal hWnd As Long, _ 
  ByVal nIndex As Long _ 
  ) As Long 
Private Declare Function SetWindowLong _ 
  Lib "user32" Alias "SetWindowLongA" ( _ 
  ByVal hWnd As Long, _ 
  ByVal nIndex As Long, _ 
  ByVal NewLong As Long _ 
  ) As Long 
Public Property Get CaptionAlignment(ByVal Control As Object) As CustomAlignment 
  If (TypeOf Control Is VB.CommandButton) Or _ 
     (TypeOf Control Is VB.CheckBox) Or _ 
     (TypeOf Control Is VB.Frame) Or _ 
     (TypeOf Control Is VB.OptionButton) Then 
      CaptionAlignment = GetWindowLong(Control.hWnd, GWL_STYLE) And CustomAlignAll 
  End If 
End Property 
Public Property Let CaptionAlignment(ByVal Control As Object, ByVal Alignment As CustomAlignment) 
Dim lStyle As Long 
  If (TypeOf Control Is VB.CommandButton) Or _ 
     (TypeOf Control Is VB.CheckBox) Or _ 
     (TypeOf Control Is VB.Frame) Or _ 
     (TypeOf Control Is VB.OptionButton) Then 
    With Control 
      lStyle = GetWindowLong(.hWnd, GWL_STYLE) And Not CustomAlignAll 
      SetWindowLong .hWnd, GWL_STYLE, lStyle Or Alignment 
      .Refresh 
    End With 
  End If 
End Property

Die Ausrichtung der Beschriftungen für die angesprochenen Steuerelementtypen können Sie nun ganz einfach modifizieren. Möchten Sie beispielsweise die Beschriftung eines CommandButtons "Command1" links oben in der Befehlsschaltfläche angezeigt wissen, verwenden Sie die Ausrichtungsattribute caTop und caLeft wie folgt:

CaptionAlignment(Command1) = caTop Or caLeft

Wollen Sie die Anzeige der Beschriftung fü "Command1" horizontal wie vertikal zentrieren, verwenden Sie sie Ausrichtungsattribute caCenterVert und caCenterHorz:

CaptionAlignment(Command1) = caCenterHorz Or caCenterVert

Probieren Sie diese erweiterte Möglichkeit auch mit den anderen angesprochenen Steuerelement-Typen einfach einmal aus!