Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Listboxes and SendMessage API

Posted on 1998-03-13
8
Medium Priority
?
440 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

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

Introduction In a recent article (http://www.experts-exchange.com/A_7811-A-Better-Concatenate-Function.html) for the Excel community, I showed an improved version of the Excel Concatenate() function.  While writing that article I realized that no o…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
Suggested Courses

715 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