Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB4/32,VB5,VB6
Expertise: Intermediate
Nov 4, 2000

DuplicateListBox - Fast copy of the contents of a ListBox control

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
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) _
    As Long
   
Const LB_RESETCONTENT = &H184
Const LB_GETCOUNT = &H18B
Const LB_GETTEXT = &H189
Const LB_ADDSTRING = &H180
Const LB_GETITEMDATA = &H199
Const LB_SETITEMDATA = &H19A

' Duplicate the contents of a ListBox control to another ListBox control
'
' Pass False to the last argument to append contents
' (the target control isn't cleared before adding elements)
'
' uses API functions for the fastest code

Sub DuplicateListBox(Source As ListBox, Target As ListBox, _
    Optional AppendMode As Boolean)
    Dim index As Long
    Dim itmData As Long
    Dim numItems As Long
    Dim sItemText As String
    
    ' prepare the receiving buffer
    sItemText = Space$(512)
    
    ' temporarily prevent updating
    LockWindowUpdate Target.hWnd
    
    ' reset target contents, if not in append mode
    If Not AppendMode Then
        SendMessage Target.hWnd, LB_RESETCONTENT, 0, ByVal 0&
    End If

    ' get the number of items in the source list
    numItems = SendMessage(Source.hWnd, LB_GETCOUNT, 0&, ByVal 0&)
    
    For index = 0 To numItems - 1
        ' get the item text
        SendMessage Source.hWnd, LB_GETTEXT, index, ByVal sItemText
        ' get the item data
        itmData = SendMessage(Source.hWnd, LB_GETITEMDATA, index, ByVal 0&)
        ' add the item text to the target list
        SendMessage Target.hWnd, LB_ADDSTRING, 0&, ByVal sItemText
        ' add the item data to the target list
        SendMessage Target.hWnd, LB_SETITEMDATA, index, ByVal itmData
    Next
    
    ' allow redrawing
    LockWindowUpdate 0
    
End Sub

Marco Bellinaso
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date