Voilà un exemple de ListIcon virtuel :
Code : Tout sélectionner
;
; Virtual ListIconGadget [Can Hold Lots Of Data]...
;
;... Use 1000000 items
#ItemCount = 1000000
#LVSICF_NOINVALIDATEALL = 1
#LVN_ODCACHEHINT = #LVN_FIRST - 13
;... Array to hold data
Global Dim myItems.s(#ItemCount,1)
Procedure WinCallback(hWnd, msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_NOTIFY
*pnmh.NMHDR = lParam
Select *pnmh\code
Case #LVN_ODCACHEHINT
result = 0
Case #LVN_GETDISPINFO
*pnmlvdi.NMLVDISPINFO = lParam
If *pnmlvdi\item\mask & #LVIF_TEXT
;... Item text is being requested
*pnmlvdi\item\pszText = @myItems(*pnmlvdi\item\iItem,*pnmlvdi\item\iSubItem)
EndIf
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 640, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowCallback(@WinCallback())
List=ListIconGadget(#PB_Any,10,10,620,280,"ID",50,#LVS_OWNERDATA)
;... Set desired number of ListIconGadget items
SendMessage_(GadgetID(List), #LVM_SETITEMCOUNT, #ItemCount, #LVSICF_NOINVALIDATEALL)
AddGadgetColumn(List,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
EndIf
Les éléments sont affichés à la demande via le callback.
Référence :
http://msdn.microsoft.com/en-us/library/bb774735(VS.85)