Rubrik: Controls · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 23.06.03 |
AutoSize für den Command-Button Optimale Breite für einen Command Button einstellen. | ||
Autor: Roland Wutzke | Bewertung: | Views: 18.301 |
www.vb-power.net | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Angenommen Sie schreiben eine mehrsprachige Anwendung. Was machen Sie jetzt mit Ihren Command-Buttons auf der Form? Sie ermitteln durch testen mit den unterschiedlichen Sprachen die maximale Breite der Buttons, damit auch ja alles vernünftig angezeigt wird.
Oder Sie weisen dem Button zur Laufzeit einen dynamischen Text zu. Auch hier gilt: Testen, testen und wieder testen bis die richtige Breite gefunden ist.
Da der Command-Button keine AutoSize Eigenschaft wie z.B. das Label hat, bauen wir uns selber eine.
Die Funktion cmdAutoSize erwartet folgende Parameter:
- oButton: Button, der eingestellt werden soll
- Optional minTwips = 400: min. Breite, die nicht unterschritten wird (Twips)
- Optional addTwips = 100: zusätzliche Breite für den Rand (Twips)
- Optional oAlignment = b_Center: Ausrichtung des Buttons relativ zur alten Position
Der optionale Parameter oAlignment bestimmt die Ausrichtung des Buttons relativ zur alten Position auf der Form. Sie wird über die Aufzählung cmdAlignment festgelegt. Voreingestellt ist b_Center.
Da der Text i.d.R. durch einen TrueType Font dargestellt wird, müssen wir auch noch die schmaleren Buchstaben und Sonderzeichen wie "l i 1 . : , ;" usw. berücksichtigen. Das aber übernimmt die Funktion automatisch für Sie. Diese Zeichen werden mit 1/3 der Schriftbreite berechnet.
Fügen Sie nachfolgenden Code in ein Modul ein:
Option Explicit Public Enum cmdAlignment b_Left = 0 b_Right = 1 b_Center = 2 End Enum
' Optimale Breite eines CommandButtons einstellen Public Sub cmdAutoSize(oButton As CommandButton, _ Optional minTwips As Long = 400, _ Optional addTwips As Long = 100, _ Optional oAlignment As cmdAlignment = b_Center) Dim aktSize As Single Dim tmpSize As Single Dim tmpWidth As Long Dim x As Long ' Variablen initialisieren aktSize = oButton.Font.Size tmpSize = 0 tmpWidth = oButton.Width With oButton ' Schleife über die Länge des Caption Text For x = 1 To Len(.Caption) Select Case Mid$(.Caption, x, 1) ' Spezielle Zeichen ermitteln und 1/3 der Breite zur ' Berechnung in die Größen-Variable übertragen Case "!", "`", "´", "'", "|", ",", ";", _ ".", ":", "1", "l", "i", "I", "f" tmpSize = tmpSize + (aktSize / 3) ' Alle anderen Zeichen mit der vollen Breite berechnen Case Else tmpSize = tmpSize + aktSize End Select Next x ' Ermittelte Größe in Twips umrechnen tmpSize = CLng(tmpSize * Screen.TwipsPerPixelX) ' Und jetzt den Butten einstellen. Dabei werden ' die Parameter minTwips und addTwips berücksichtigt. If (tmpSize + addTwips) > minTwips Then .Width = tmpSize + addTwips Else .Width = minTwips End If ' Und jetzt die Ausrichtung des Buttons relativ ' zur alten Position einstellen. Select Case oAlignment Case cmdAlignment.b_Left ' Wir machen nichts, denn Left ist Default... Case cmdAlignment.b_Right .Left = .Left - (.Width - tmpWidth) Case cmdAlignment.b_Center .Left = .Left - ((.Width - tmpWidth) \ 2) End Select End With End Sub
Aufruf-Beispiel:
' Der Button wird mit den Standard Parameter ' der Funktion eingestellt Command1.Caption = "neuer Buttontext" cmdAutoSize Command1
Oder:
' Der Rand soll mit 200 Twips berechnet werden ' und die Ausrichtung wird auf Rechts gesetzt. Command1.Caption = "neuer Buttontext" cmdAutoSize Command1, , 200, b_Right
Oder:
' Der Button darf 1000 Twips nicht unterschreiten: Command1.Caption = "neuer Buttontext" cmdAutoSize Command1, 1000