Johan
Johan

Reputation: 1302

How do I align text in VB6 ComboBoxes?

Fairly straight forward question, is it possible to align text (left, right, center etc...) in comboboxes in VB6? If so, how?

When the text is longer than the width of a combobox, what is shown of the text starts somewhere in the middle of the text.

Upvotes: 1

Views: 5025

Answers (3)

miPwn
miPwn

Reputation: 1166

Here's some code a friend of mine wrote for autosizing the combo box to it's contents.

Code

Public Sub ComboDropDownWidth(ByRef cboThis As ComboBox, _
                              ByVal lWidth As Long)
    'PS 11/05/06 PUK5023 Added to automatically size a combo drop-down width to the widest entry
    'PS 11/05/06 PUK5023 This function will custom re-size a combo drop-down width (see also ComboDropDownWidthFromContents)
    On Error GoTo ComboDropDownWidth_Err
    SendMessageLong cboThis.hWnd, CB_SETDROPPEDWIDTH, lWidth, 0
Exit_Point:
    Exit Sub
    '' Error Handling
ComboDropDownWidth_Err:
    LogError "modNYFixLibrary.ComboDropDownWidth", Err.Number, Err.Description
    GoTo Exit_Point
    Resume
End Sub
Public Sub ComboDropDownWidthFromContents(ByRef cboThis As ComboBox, _
                                          Optional ByVal lMaxWidth = -1)
    'PS 11/05/06 PUK5023 Added to automatically size a combo drop-down width to the widest entry
    Dim i As Long
    Dim tR As RECT
    Dim lW As Long
    Dim lWidth As Long
    Dim lHDC As Long
    On Error GoTo ComboDropDownWidthFromContents_Err
    ' Cache the HDC of the parent form for speed:
    lHDC = cboThis.Parent.HDC
    ' Loop through each combo box list item & get its
    ' width, storing the largest:
    For i = 0 To cboThis.ListCount - 1
        DrawText lHDC, cboThis.List(i), -1, tR, DT_CALCRECT
        lW = tR.Right - tR.Left + 8
        If (lW > lWidth) Then
            lWidth = lW
        End If
    Next i
    ' Don't allow width to exceed specified max
    ' width, or the width of the screen:
    If lMaxWidth <= 0 Then
        lMaxWidth = Screen.Width \ Screen.TwipsPerPixelX - 16
    End If
    If (lWidth > lMaxWidth) Then
        lWidth = lMaxWidth
    End If
    ' Combo box looks a bit strange when the
    ' drop down portion is smaller than the
    ' combo box itself:
    If (lWidth < cboThis.Width \ Screen.TwipsPerPixelX) Then
        lWidth = cboThis.Width \ Screen.TwipsPerPixelX
        ComboDropDownWidth cboThis, lWidth
    Else
        'If it is longer Set the drop down width and add a little for good measure otherwise it still obscures the last character
        ComboDropDownWidth cboThis, lWidth + 20
    End If
Exit_Point:
    Exit Sub
    '' Error Handling
ComboDropDownWidthFromContents_Err:
    LogError "modNYFixLibrary.ComboDropDownWidthFromContents", Err.Number, Err.Description
    GoTo Exit_Point
    Resume
End Sub

Upvotes: 0

MarkJ
MarkJ

Reputation: 30408

Here's a link to VB6 code for automatically sizing the drop-down portion of a combo-box to fit the contents.

vbAccelerator.com usually has high quality code. Interestingly the vbAccelerator code looks very similar to the code in this answer (right down to the comments), but the vbAccelerator code works when the combo box has a different font to its parent form, unlike the code in the other answer.

Upvotes: 0

Patrick McDonald
Patrick McDonald

Reputation: 65471

The answer unfortunately is not so straightforward.

There is a code example here: http://vbnet.mvps.org/index.html?code/comboapi/comborightalignstylebits.htm that will right align the list items in a combo box. There is no example of centering the text however.

Upvotes: 1

Related Questions