- Offizieller Beitrag
Ich habe ein Problem mit der Geschwindigkeit eines Scripts. Und zwar geht es darum die Anzahl der angehakten Listview-Items herauszubekommen.
Dazu habe ich mir das folgende Script geschrieben:
Spoiler anzeigen
#include<StaticConstants.au3>
#include<ListViewConstants.au3>
#include<WindowsConstants.au3>
#include<GuiConstantsEx.au3>
#include<GuiListView.au3>
Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate("ListView", 400, 380)
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
$LVStyle = BitOR($LVS_NOCOLUMNHEADER, $LVS_REPORT, $LVS_SINGLESEL)
$ExStyle = BitOR($LVS_EX_FULLROWSELECT, $WS_EX_DLGMODALFRAME, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER)
$hListView = GUICtrlCreateListView(' ', 5, 5, 390, 320, $LVStyle, $ExStyle)
For $i = 0 To 9999
GUICtrlCreateListViewItem("data1", $hListView)
GUICtrlSetOnEvent(-1, '_RefreshCounter')
Next
_GUICtrlListView_SetColumnWidth($hListview, 0, 365)
$hLabel = GUICtrlCreateLabel('0', 10, 340, 90, 24, $SS_CENTER, $WS_EX_DLGMODALFRAME)
[/autoit] [autoit][/autoit] [autoit]GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(10)
WEnd
Func _End()
Exit
EndFunc ;==>_End
Func _RefreshCounter()
Local $iCount = _GUICtrlListView_GetCheckedCount($hListview)
GUICtrlSetData($hLabel, $iCount)
EndFunc
Func _GUICtrlListView_GetCheckedCount($hListview)
Local $iCount = _GUICtrlListView_GetItemCount($hListview), $iCheckedCount = 0
For $i = 0 To $iCount
$iCheckedCount += _GUICtrlListView_GetItemChecked($hListview, $i)
Next
Return $iCheckedCount
EndFunc ;==>_GUICtrlListView_GetCheckedCount
Das funktioniert auch so, wie ich mir das vorstelle, aber es ist etwas langsam. Wenn man einen Haken setzt oder entfernt wird die Anzeige erst verzögert aktualisiert.
Meine Frage ist nun: Kennt jemand eine schnellere Lösung dafür?