1 - Using Timer
Code: Select all
If OpenWindow(0, 0, 0, 300, 430, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 5, 5, 290, 390, "Name", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
StringGadget(1, 5, 405, 85, 20, "")
AddGadgetColumn(0, 1, "Address", 250)
AddWindowTimer(0,125,1)
Repeat
Event = WindowEvent()
If Event = #PB_Event_Timer And K < 35000
k + 1
AddGadgetItem(0, -1, Str(k)+Chr(10)+"PureBasic Road, BigTown, CodeCity")
SetGadgetText(1,Str(k))
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
OR
Code: Select all
If OpenWindow(0, 0, 0, 300, 430, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 5, 5, 290, 390, "Name", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
StringGadget(1, 5, 405, 85, 20, "")
AddGadgetColumn(0, 1, "Address", 250)
AddWindowTimer(0,125,1)
Repeat
Event = WindowEvent()
If Event = #PB_Event_Timer And K < 35000
For x = k To k+100
AddGadgetItem(0, -1, Str(x)+Chr(10)+"PureBasic Road, BigTown, CodeCity")
SetGadgetText(1,Str(x))
Next
k + 100
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
2- Using Thread without stop redrawing (You can do something else while filling the data)
Code: Select all
Procedure FillLI(Parameter)
While k < 35000
k + 1
AddGadgetItem(0, -1, Str(k)+Chr(10)+"PureBasic Road, BigTown, CodeCity")
SetGadgetText(1,Str(k))
Wend
EndProcedure
If OpenWindow(0, 100, 100, 300, 430, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 5, 5, 290, 390, "Name", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
StringGadget(1, 5, 405, 85, 20, "")
AddGadgetColumn(0, 1, "Address", 250)
Thread = CreateThread(@FillLI(), 1)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf
3- Using Virtual ListIcon
Code: Select all
#ItemCount = 35000
#LVSICF_NOINVALIDATEALL = 1
#LVN_ODCACHEHINT = #LVN_FIRST - 13
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
*pnmlvdi\item\pszText = @myItems(*pnmlvdi\item\iItem,*pnmlvdi\item\iSubItem)
SetGadgetText(1,Str(#ItemCount))
EndIf
;
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
;
If OpenWindow(0, 0, 0, 300, 430, "Virtual ListIconGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowCallback(@WinCallback())
Licon = ListIconGadget(0,5,5,290,390,"Name",50,#LVS_OWNERDATA)
StringGadget(1,5,405,85,20,"")
SendMessage_(Licon, #LVM_SETITEMCOUNT, #ItemCount, #LVSICF_NOINVALIDATEALL)
AddGadgetColumn(0,2,"Address",300)
For i=0 To #ItemCount
myItems(i,0) = Str(i)
myItems(i,1) = "PureBasic Road, BigTown, CodeCity"
Next i
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf