topten Posted July 8, 2015 Share Posted July 8, 2015 Hi EveryoneI am trying to figure out is there any more nice way to update an item in _guictrllistviewAt the present I am using_GUICtrlListView_DeleteAllItems($hListView) _GUICtrlListView_InsertItem($hListView, $Fetch_data[0], 0) _GUICtrlListView_AddSubItem($hListView,0, $Fetch_data[2], 1,1) _GUICtrlListView_AddSubItem($hListView, 0, $Fetch_data[3], 2, 2) _GUICtrlListView_AddSubItem($hListView, 0, $Fetch_data[1], 3, 3) _GUICtrlListView_AddSubItem($hListView, 0, $Fetch_data[4], 4, 4) _GUICtrlListView_AddSubItem($hListView, 0, $Fetch_data[5], 5, 5)And it works ok if you have 10-20 rows. But if you have 1000 rows and the data is dynamically updated- you'll have to wait long time when it is rebuilt Link to comment Share on other sites More sharing options...
reb Posted July 8, 2015 Share Posted July 8, 2015 If the items exist then why not use _GUICtrlListView_SetItem ? MEASURE TWICE - CUT ONCE Link to comment Share on other sites More sharing options...
topten Posted July 8, 2015 Author Share Posted July 8, 2015 The items are fetched in a loop from array... Anyway, thanx for a clue, I will try using it Link to comment Share on other sites More sharing options...
LarsJ Posted July 8, 2015 Share Posted July 8, 2015 (edited) To update a list view in a fast way use code as you see in the FillListView function in bottom of this example.expandcollapse popup#include <GUIConstants.au3> #include <WindowsConstants.au3> #include <GuiImageList.au3> #include <GuiListView.au3> ;#include "Cursor.au3" Opt( "MustDeclareVars", 1 ) Global $hGui Example() Func Example() ; Create GUI $hGui = GUICreate( "GUICtrlCreateListViewItem ListViews", 850, 400 ) ; Create Tab Local $idTab = GUICtrlCreateTab( 10, 10, 850-20, 400-20 ) GUICtrlCreateTabItem( "Array: 10,000 rows" ) GUICtrlCreateTabItem( "Array: 20,000 rows" ) GUICtrlCreateTabItem( "Array: 30,000 rows" ) GUICtrlCreateTabItem( "Array: 40,000 rows" ) GUICtrlCreateTabItem( "Array: 50,000 rows" ) GUICtrlCreateTabItem( "" ) ; Create ListView Local $idLV = GUICtrlCreateListView( "", 20, 40, 850-40, 400-60, $GUI_SS_DEFAULT_LISTVIEW, BitOR( $WS_EX_CLIENTEDGE, $LVS_EX_DOUBLEBUFFER, $LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES ) ) Local $hLV = GUICtrlGetHandle( $idLV ) ; Reduces flicker Checkboxes For $i = 0 To 9 _GUICtrlListView_AddColumn( $hLV, "Col" & $i, 75 ) Next ; Load icon images Local $hImage = _GUIImageList_Create() _GUIImageList_Add( $hImage, _GUICtrlListView_CreateSolidBitMap( $hLV, 0xFF0000, 16, 16 ) ) ; Index = 0 _GUIImageList_Add( $hImage, _GUICtrlListView_CreateSolidBitMap( $hLV, 0x00FF00, 16, 16 ) ) ; Index = 1 _GUIImageList_Add( $hImage, _GUICtrlListView_CreateSolidBitMap( $hLV, 0x0000FF, 16, 16 ) ) ; Index = 2 _GUICtrlListView_SetImageList( $hLV, $hImage, 1 ) GUISetState( @SW_SHOW ) ; Data Local $iRows, $iRows1 = 0, $iRows2 = 0, $iRows3 = 0, $iRows4 = 0, $iRows5 = 0 Local $aItems, $aItems1[10000][10], $aItems2[20000][10], $aItems3[30000][10], $aItems4[40000][10], $aItems5[50000][10] ; Data for first tab $iRows1 = FillArray( $aItems1, 10000 ) $iRows = $iRows1 $aItems = $aItems1 FillListView( $idLV, $aItems, $iRows ) ; Message loop While 1 Switch GUIGetMsg() Case $idTab ;HourglassCursor( True ) WinSetTitle( $hGui, "", "GUICtrlCreateListViewItem ListViews. Delete all items" ) _GUICtrlListView_DeleteAllItems( $hLV ) ;HourglassCursor( False ) Switch GUICtrlRead( $idTab ) Case 0 If $iRows1 = 0 Then _ $iRows1 = FillArray( $aItems1, 10000 ) $iRows = $iRows1 $aItems = $aItems1 Case 1 If $iRows2 = 0 Then _ $iRows2 = FillArray( $aItems2, 20000 ) $iRows = $iRows2 $aItems = $aItems2 Case 2 If $iRows3 = 0 Then _ $iRows3 = FillArray( $aItems3, 30000 ) $iRows = $iRows3 $aItems = $aItems3 Case 3 If $iRows4 = 0 Then _ $iRows4 = FillArray( $aItems4, 40000 ) $iRows = $iRows4 $aItems = $aItems4 Case 4 If $iRows5 = 0 Then _ $iRows5 = FillArray( $aItems5, 50000 ) $iRows = $iRows5 $aItems = $aItems5 EndSwitch FillListView( $idLV, $aItems, $iRows ) Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd GUIDelete() EndFunc Func FillArray( ByRef $aItems, $iRows ) Local $k ;HourglassCursor( True ) For $i = 0 To $iRows / 10000 - 1 $k = $i * 10000 For $j = 0 To 9999 $aItems[$k+$j][0] = $k + $j For $l = 1 To 9 $aItems[$k+$j][$l] = $k + $j & "/" & $l Next Next WinSetTitle( $hGui, "", "GUICtrlCreateListViewItem ListViews. Fills array: " & $k + 10000 & " rows" ) Next ;HourglassCursor( False ) WinSetTitle( $hGui, "", "GUICtrlCreateListViewItem ListViews" ) Return $iRows EndFunc Func FillListView( $idLV, ByRef $aItems, $iRows ) Local $tLVITEM = DllStructCreate( $tagLVITEM ) Local $pLVITEM = DllStructGetPtr( $tLVITEM ), $k, $s DllStructSetData( $tLVITEM, "Mask", $LVIF_IMAGE ) ; Icon (or image) DllStructSetData( $tLVITEM, "SubItem", 0 ) ; First column ;HourglassCursor( True ) For $i = 0 To $iRows / 10000 - 1 $k = $i * 10000 For $j = 0 To 9999 ; Text $s = $aItems[$k+$j][0] For $l = 1 To 9 $s &= "|" & $aItems[$k+$j][$l] Next GUICtrlCreateListViewItem( $s, $idLV ) ; Add item and all texts ; Icon Select Case Mod( $k + $j, 3 ) = 0 DllStructSetData( $tLVITEM, "Image", 2 ) ; Icon index Case Mod( $k + $j, 2 ) = 0 DllStructSetData( $tLVITEM, "Image", 1 ) Case Else DllStructSetData( $tLVITEM, "Image", 0 ) EndSelect DllStructSetData( $tLVITEM, "Item", $k + $j ) ; Row GUICtrlSendMsg( $idLV, $LVM_SETITEMW, 0, $pLVITEM ) ; Add icon Next WinSetTitle( $hGui, "", "GUICtrlCreateListViewItem ListViews. Fills listview: " & $k + 10000 & " rows" ) Next ;HourglassCursor( False ) WinSetTitle( $hGui, "", "GUICtrlCreateListViewItem ListViews" ) EndFuncMaybe this example does not match your situation too good. I'll add a better example tomorrow. Edited July 8, 2015 by LarsJ The last sentence Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions Link to comment Share on other sites More sharing options...
guinness Posted July 9, 2015 Share Posted July 9, 2015 Also look at begin update, to stop repainting on every addition. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
LarsJ Posted July 9, 2015 Share Posted July 9, 2015 Here is a better example:expandcollapse popup#include <GUIConstants.au3> #include <WindowsConstants.au3> #include <GuiImageList.au3> #include <GuiListView.au3> Opt( "MustDeclareVars", 1 ) Global $hGui Example() Func Example() ; Create GUI $hGui = GUICreate( "ListView: 10,000 rows", 850, 440 ) ; Create ListView Local $idLV = GUICtrlCreateListView( "", 10, 10, 850-20, 400-20, $GUI_SS_DEFAULT_LISTVIEW, BitOR( $WS_EX_CLIENTEDGE, $LVS_EX_DOUBLEBUFFER, $LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES ) ) Local $hLV = GUICtrlGetHandle( $idLV ) ; Reduces flicker Checkboxes For $i = 0 To 9 _GUICtrlListView_AddColumn( $hLV, "Col" & $i, 75 ) Next ; Create button Local $idBut = GUICtrlCreateButton( "Update 1000 rows", 10, 400, 200, 30 ) ; Load icon images Local $hImage = _GUIImageList_Create() _GUIImageList_Add( $hImage, _GUICtrlListView_CreateSolidBitMap( $hLV, 0xFF0000, 16, 16 ) ) ; Index = 0 _GUIImageList_Add( $hImage, _GUICtrlListView_CreateSolidBitMap( $hLV, 0x00FF00, 16, 16 ) ) ; Index = 1 _GUIImageList_Add( $hImage, _GUICtrlListView_CreateSolidBitMap( $hLV, 0x0000FF, 16, 16 ) ) ; Index = 2 _GUICtrlListView_SetImageList( $hLV, $hImage, 1 ) GUISetState( @SW_SHOW ) ; Fill array Local $iRows = 10000, $aItems[$iRows][10] FillArray( $aItems, $iRows ) ; Fill ListView FillListView( $idLV, $aItems, $iRows ) ; Get control ID for first item ; (Control ID is stored in ItemParam) Local $idLVItem0 = _GUICtrlListView_GetItemParam( $hLV, 0 ) ; Message loop While 1 Switch GUIGetMsg() Case $idBut UpdateListView( $idLVItem0, 1000 ) MsgBox( 0, "UpdateListView", "Done" ) Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd GUIDelete() EndFunc Func FillArray( ByRef $aItems, $iRows ) For $i = 0 To $iRows - 1 For $j = 1 To 9 $aItems[$i][$j] = $i & "/" & $j Next Next EndFunc Func FillListView( $idLV, ByRef $aItems, $iRows ) Local $tLVITEM = DllStructCreate( $tagLVITEM ) Local $pLVITEM = DllStructGetPtr( $tLVITEM ), $k, $s DllStructSetData( $tLVITEM, "Mask", $LVIF_IMAGE ) ; Icon (or image) DllStructSetData( $tLVITEM, "SubItem", 0 ) ; First column For $i = 0 To $iRows - 1 ; Text $s = $aItems[$i][0] For $j = 1 To 9 $s &= "|" & $aItems[$i][$j] Next GUICtrlCreateListViewItem( $s, $idLV ) ; Add item and all texts ; Icon Select Case Mod( $i, 3 ) = 0 DllStructSetData( $tLVITEM, "Image", 2 ) ; Icon index Case Mod( $i, 2 ) = 0 DllStructSetData( $tLVITEM, "Image", 1 ) Case Else DllStructSetData( $tLVITEM, "Image", 0 ) EndSelect DllStructSetData( $tLVITEM, "Item", $i ) ; Row GUICtrlSendMsg( $idLV, $LVM_SETITEMW, 0, $pLVITEM ) ; Add icon Next EndFunc Func UpdateListView( $idLVItem0, $iRows ) Local $item, $text = "|Updated|Updated|Updated|Updated|Updated|Updated|Updated|Updated|Updated" For $i = 0 To $iRows - 1 $item = Random( $idLVItem0+$i*10, $idLVItem0+($i+1)*10-1, 1 ) GUICtrlSetData( $item, $text ) Next EndFunc Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now