Results 1 to 9 of 9

Thread: [SRC] cListBoxMultiAlign [by Mr. Frog ©]

Threaded View

  1. #1

    Thread Starter
    Addicted Member *PsyKE1*'s Avatar
    Join Date
    Jun 2010
    Location
    Spain
    Posts
    243

    Thumbs up [SRC] cListBoxMultiAlign [by Mr. Frog ©]

    I leave my last class used to justify text in a ListBox, the novelty is that you can specifically act on each Item, I leave the code:
    vb Code:
    1. Option Explicit
    2. '==================================================================================================
    3. ' º Class     : MultiAlignListBox.cls
    4. ' º Version   : 1.1
    5. ' º Author    : Mr.Frog ©
    6. ' º Country   : Spain
    7. ' º Mail      : [email protected]
    8. ' º Date      : 14/12/2010
    9. ' º Twitter   : http://twitter.com/#!/PsYkE1
    10. ' º Tested on : WinXp & Win7
    11. ' º Greets    : LaVolpe & Raul338 & BlackZer0x
    12. ' º Reference : http://www.elguille.info/colabora/vb2006/karmany_centrartextolistbox.htm
    13. ' º Recommended Websites :
    14. '       http://visual-coders.com.ar
    15. '       http://InfrAngeluX.Sytes.Net
    16. '==================================================================================================
    17.  
    18. Private Declare Function GetDialogBaseUnits Lib "user32" () As Long
    19. Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    20. Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
    21. Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    22. Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
    23. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    24. Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hDC As Long, ByVal lpString As String, ByVal cbString As Long, lpSize As SIZE) As Long
    25.  
    26. Private Type RECT
    27.     Left    As Long
    28.     Top     As Long
    29.     Right   As Long
    30.     Bottom  As Long
    31. End Type
    32.  
    33. Private Type SIZE
    34.     cX      As Long
    35.     cY      As Long
    36. End Type
    37.  
    38. Private Const LB_SETTABSTOPS                        As Long = &H192&
    39. Private Const WM_GETFONT                            As Long = &H31&
    40.  
    41. Private Const CHARS_LIST                            As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
    42. Private Const CHARS_LEN                             As Long = &H3E&
    43.  
    44. Private myListBox                                   As ListBox
    45. Private lListhWnd                                   As Long
    46. Private lWidth                                      As Long
    47.  
    48. Public Sub SetListBox(myList As ListBox)
    49.     If Not (myList Is Nothing) Then
    50.         Set myListBox = myList
    51.         lListhWnd = myListBox.hwnd
    52.         SetRightTab
    53.     End If
    54. End Sub
    55.  
    56. Public Sub AddAlignItem(ByVal Item As String, ByVal Align As AlignmentConstants, Optional ByVal Index As Long = (-1))
    57. Dim lCenterAlign                                    As Long
    58.  
    59.     With myListBox
    60.         lCenterAlign = Int(.Width - PixelsPerUnit(Item))
    61.         If lCenterAlign < 0 Then Align = vbLeftJustify
    62.        
    63.         If Index = (-1) Then Index = .ListCount
    64.        
    65.         Select Case Align
    66.             Case vbRightJustify
    67.                 .AddItem vbTab & Item, Index
    68.                 If Not (lWidth = GetListSize) Then SetRightTab
    69.             Case vbCenter
    70.                 .AddItem Space$(Abs(Int(lCenterAlign / PixelsPerUnit(Space$(1)) / 2) - 1.5)) & Item, Index
    71.             Case Else
    72.                 .AddItem Item, Index
    73.         End Select
    74.     End With
    75. End Sub
    76.  
    77. Public Sub ChangeListBoxAlign(Optional ByVal Index As Long = (-1), Optional ByVal Align As AlignmentConstants = vbAlignLeft)
    78. Dim Q                                               As Long
    79.  
    80.     If Index > -1 Then
    81.         SetAlign Index, Align
    82.     Else
    83.         For Q = 0 To (myListBox.ListCount - 1)
    84.             SetAlign Q, Align
    85.         Next Q
    86.     End If
    87. End Sub
    88.  
    89. Public Function GetItem(ByVal Index As Long) As String
    90.     GetItem = LTrim$(myListBox.List(Index))
    91.    
    92.     If (GetItem Like (vbTab & "*")) Then
    93.         GetItem = Right$(GetItem, (Len(GetItem) - 1))
    94.     End If
    95. End Function
    96.  
    97. Private Sub SetAlign(ByVal Index As Long, ByVal Align As AlignmentConstants)
    98. Dim sItem                                           As String
    99.  
    100.     With myListBox
    101.         sItem = GetRealItem(Index)
    102.         If Not (.List(Index) = sItem) Then
    103.             .RemoveItem (Index)
    104.             AddAlignItem sItem, Align, Index
    105.         End If
    106.     End With
    107. End Sub
    108.  
    109. Private Sub SetRightTab()
    110. Dim lRightAlignTab                                  As Long
    111.  
    112.     lWidth = GetListSize
    113.     lRightAlignTab = -(lWidth / PixelsPerUnit)
    114.    
    115.     SendMessage lListhWnd, LB_SETTABSTOPS, &H0&, ByVal &H0&
    116.     SendMessage lListhWnd, LB_SETTABSTOPS, &H1&, lRightAlignTab
    117.    
    118.     myListBox.Refresh
    119. End Sub
    120.  
    121. Private Function GetListSize() As Long
    122. Dim RCT                                             As RECT
    123.  
    124.     GetClientRect lListhWnd, RCT
    125.     With RCT
    126.         GetListSize = (.Right - .Left)
    127.     End With
    128. End Function
    129.  
    130.  
    131. Private Function PixelsPerUnit(Optional ByVal sText As String) As Single
    132. Dim hDC                                             As Long
    133. Dim hFont                                           As Long
    134. Dim hFontOld                                        As Long
    135. Dim SZ                                              As SIZE
    136.  
    137.     hDC = GetDC(lListhWnd)
    138.     If CBool(hDC) = True Then
    139.         hFont = SendMessage(lListhWnd, WM_GETFONT, &H0&, ByVal &H0&)
    140.         hFontOld = SelectObject(hDC, hFont)
    141.        
    142.         If sText = vbNullString Then
    143.             If GetTextExtentPoint32(hDC, CHARS_LIST, CHARS_LEN, SZ) Then
    144.                 PixelsPerUnit = CSng((2 * CLng(SZ.cX / CHARS_LEN)) / (GetDialogBaseUnits And &HFFFF&))
    145.             End If
    146.         Else
    147.             If GetTextExtentPoint32(hDC, sText, Len(sText), SZ) Then
    148.                 PixelsPerUnit = (SZ.cX * Screen.TwipsPerPixelX)
    149.             End If
    150.         End If
    151.        
    152.         SelectObject hDC, hFontOld
    153.         ReleaseDC lListhWnd, hDC
    154.     End If
    155. End Function
    156.  
    157. Private Sub Class_Initialize()
    158.     Debug.Print "--> cListBoxMultiAlign.cls By Mr.Frog © <--"
    159. End Sub

    A picture is worth a thousand words:

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width