Mulitple item select in ListView
Posted: Fri Jan 20, 2006 5:04 pm
Hello!
Here is simple API code for getting all the selected items in a ListViewGadget. Note that you have to use the #LBS_EXTENDEDSEL flag to select multiple items, do not use #LBS_MULTIPLESEL flag.
No credit needed. Have fun.
Here is simple API code for getting all the selected items in a ListViewGadget. Note that you have to use the #LBS_EXTENDEDSEL flag to select multiple items, do not use #LBS_MULTIPLESEL flag.
No credit needed. Have fun.
Code: Select all
Procedure.l GetSelectedItems(Gadget)
SelItems=SendMessage_(GadgetID(Gadget), #LB_GETSELCOUNT, 0, 0) ; Count the selected items.
If SelItems
Dim ItemIndexes.l(SelItems) ; Create an array that will contain the items.
; Get the selected items and pass them into the array.
SendMessage_(GadgetID(Gadget), #LB_GETSELITEMS, SelItems, @ItemIndexes())
; Get the last selected item (where the mouse was released).
LastItem=SendMessage_(GadgetID(Gadget), #LB_GETCURSEL, 0, 0)
; Sort the array (this prevents some unwanted results).
SortArray(ItemIndexes(), 0)
; Debug the selected items.
Debug "Selected items:"
For a=1 To SelItems
Debug "> Item "+Str(ItemIndexes(a)+1)
Next
Debug "Mouse released on item "+Str(LastItem+1)
Debug "--------"
EndIf
EndProcedure
; Create the window and process the events.
If OpenWindow(0,0,0,200,71,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Multiple items select")
CreateGadgetList(WindowID())
; Note that you have to use #LBS_EXTENDEDSEL. Don't use #LBS_MULTIPLESEL!
ListViewGadget(0,1,1,198,69, #LBS_EXTENDEDSEL)
; Add some items.
For a=1 To 5
AddGadgetItem(0, -1, "Item "+Str(a))
Next
; Main program loop.
Close=0
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
; Get the user selected items in the ListViewGadget.
If EventGadgetID()=0
GetSelectedItems(0)
EndIf
; Deselect all items whenever a right-click occurs on the ListViewGadget.
Case #WM_RBUTTONDOWN
If ChildWindowFromPoint_(WindowID(), WindowMouseX(), WindowMouseY())=GadgetID(0)
SendMessage_(GadgetID(0), #LB_SETSEL, #False, -1)
EndIf
Case #PB_Event_CloseWindow
Close=1
EndSelect
Until Close=1
EndIf
End