Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Listboxes and SendMessage API

Posted on 1998-03-13
8
Medium Priority
?
446 Views
Last Modified: 2012-05-04
Can somone send me some sample code to allow me to additems and itemdata to a listbox using the SendMessage API call.  I would like to add the item, and item data in the same loop, can someone help me.  I need this urgently.  Thanks
0
Comment
Question by:Steve Groner
  • 4
  • 4
8 Comments
 
LVL 8

Expert Comment

by:MikeP090797
ID: 1459088
Declare Sub CopyMemory Lib "user32" Alias "RtlMoveMemory" (Source As Any, Dest As Any, size As Long)
Dim p as long
Dim x as long

CopyMemory p, "Item1", len(Item1)
X = SendMessage(List1.hwnd, LB_ADDITEM, 0, p)
SendMessage List1.hwnd, LB_SETITEMDATA, X, value

you can do the same in vb, but much more easier:
list1.additem "item"
list1.itemdata(list1.newindex) = value
0
 
LVL 1

Author Comment

by:Steve Groner
ID: 1459089
Not the code I am looking for.  I was told that when adding alot of record to a list box, like 10,00 plus items that using sendmessage would be faster.  MrMick had answered a question like this previously, but it was only for the adding itemdata.  This fuction should only use the sendmessage command, also do I need to set the redraw to off until it is completed.  I know I am a little off on the original question but I will upgrade the points to 100.
0
 
LVL 8

Accepted Solution

by:
MikeP090797 earned 300 total points
ID: 1459090
To speed up the adding items to the list call SendMessage with LB_INITSTORAGE:
SendMessage(list1.hwnd, LB_INITSTORAGE, 10000, 200000)
The answer i provided is good for adding items and setting itemdata. To prevent the redraw, use LockWindowUpdate
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 1

Author Comment

by:Steve Groner
ID: 1459091
Thanks
0
 
LVL 1

Author Comment

by:Steve Groner
ID: 1459092
MikeP, the rtlmovememory function does not exist, perhaps you can tell me wher eit is, I tried the code exactly as you have it and it does not work.  Help...
0
 
LVL 8

Expert Comment

by:MikeP090797
ID: 1459093
Sorry, the correct declare is:
Private Declare Function MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, src As Any, size As Long) As Long

BTW: It won't make any differense if you are using .AddItem or LB_ADDSTRING, cause.AddItem calls directly LB_ADDSTRING. The important part of the optimization is LB_INITSTORAGE and disabling the redresh

0
 
LVL 1

Author Comment

by:Steve Groner
ID: 1459094
MikeP did you test this code before you sent it.  When I use this code now, it acts as though it is doing something but nothing ever appears in the list, how do you turn on and off the refresh.  I do not know.  Here is the code I am using.

    Dim sSQL As String
    Dim rs As rdoResultset
    Dim retcode As Long
    Dim p As Long
    Dim sName As String
   
    sSQL = "Select * from apps ORDER BY LastName;"
    Set rs = cn.OpenResultset(sSQL, rdOpenDynamic, rdConcurRowVer)
   
    SendMessage list1.hwnd, LB_INITSTORAGE, 10000, 200000

    Do Until rs.EOF
   
        sName = rs!LastName + ", " + rs!FirstName
        MoveMemory p, sName, Len(sName)
        retcode = SendMessage(list1.hwnd, LB_ADDSTRING, 0, p)
        SendMessage list1.hwnd, LB_SETITEMDATA, retcode, CLng(rs!Unique)
        rs.MoveNext
       
    Loop

    Set rs = Nothing

0
 
LVL 8

Expert Comment

by:MikeP090797
ID: 1459095
You lock the window update when you pass the listbox handle, and unlcok it when you pass null:

LockWindowUpdate(List1.hwnd)  'Lock
LockWindowUpdate(vbNull)      'Unlock
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction While answering a recent question about filtering a custom class collection, I realized that this could be accomplished with very little code by using the ScriptControl (SC) library.  This article will introduce you to the SC library a…
This article describes how to use a set of graphical playing cards to create a Draw Poker game in Excel or VB6.
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Suggested Courses

572 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question