Updated :Virtual ListIcon with ChechBoxes [Windows]
Posted: Mon Sep 12, 2011 8:27 am
Hi
Code: Select all
#ItemCount = 10000
#LVSICF_NOINVALIDATEALL = 1
#LVSICF_NOSCROLL = 2
#LVN_ODCACHEHINT = #LVN_FIRST - 13
Global Dim myItems.s(#ItemCount,1)
Global Dim CheckFlag(#ItemCount)
Procedure WinCallback(hwnd, msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_NOTIFY
*nmh.NMHDR = lParam
Select *nmh\code
Case #LVN_ODCACHEHINT
result = 0
Case #LVN_ODFINDITEM
result = -1
Case #LVN_GETDISPINFO
*nmlvd.NMLVDISPINFO = lParam
If *nmlvd\item\mask & #LVIF_TEXT
*nmlvd\item\pszText = @myItems(*nmlvd\item\iItem,*nmlvd\item\iSubItem)
EndIf
If *nmlvd\item\mask & #LVIF_IMAGE
*nmlvd\item\mask & #LVIF_STATE|#LVIF_TEXT
*nmlvd\item\stateMask = #LVIS_STATEIMAGEMASK
EndIf
If *nmlvd\item\mask & #LVIF_STATE
Select CheckFlag(*nmlvd\item\iItem)
Case 0
*nmlvd\item\state = 1 << 12
Case 1
*nmlvd\item\state = 2 << 12
EndSelect
EndIf
SendMessage_(GadgetID(0), #LVM_UPDATE , *nmlvd\item\iItem, 0)
Case #NM_CLICK
*nmlv.NM_LISTVIEW = lParam
If *nmlv\iSubItem = 0
CheckFlag(*nmlv\iItem) = CheckFlag(*nmlv\iItem) ! 1
EndIf
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
OpenWindow(0, 0, 0, 640, 300, "Virtual ListIconGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowCallback(@WinCallback())
ListIconGadget(0,10,10,620,280,"ID",100,#LVS_OWNERDATA|#PB_ListIcon_CheckBoxes|#PB_ListIcon_GridLines)
SetGadgetColor(0,#PB_Gadget_BackColor, $E1FEFD)
SendMessage_(GadgetID(0), #LVM_SETITEMCOUNT, #ItemCount, #LVSICF_NOINVALIDATEALL|#LVSICF_NOSCROLL)
AddGadgetColumn(0,2,"Name",100)
For i=0 To #ItemCount
myItems(i,0) = Str(i)
myItems(i,1) = "Name "+Str(i)
Next i
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
; (INDEX SHL 12) INDEX can be 0,1 or 2:
;0 = no checkbox
;1 = unchecked checkbox
;2 = checked checkbox
; mov lvi.stateMask, LVIS_STATEIMAGEMASK
; mov lvi.state,(2 SHL 12)
; invoke SendMessage, _hListView, LVM_SETITEMSTATE, lvi.iItem, ADDR lvi.LV_ITEM