Сделал ListView с группами. Групп вполне может быть пару сотен по 10-100 элементов в группе. Для удобства сделал группы сворачиваемыми. Наткнулся на одну проблему - как узнать в каком состоянии группа сейчас? Collapsed или нет? При помощи _GUICtrlListView_SetGroupInfo можно указать, свёрнута группа или нет, думалось, что _GUICtrlListView_GetGroupInfo должна давать узнать текущее состояние свёрнутости, ан нет, такую информацию не предоставляет :(
Прикладываю пример ListView. Как сделать, что бы при нажатии на обновить ($hButton_Refresh) просто выводились статусы развёрнутости первых пяти групп?
Прикладываю пример ListView. Как сделать, что бы при нажатии на обновить ($hButton_Refresh) просто выводились статусы развёрнутости первых пяти групп?
Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
Global $hListView_Result
Global $hForm_ZaprosGUI
Global $aReqestsArray [200][2]
For $iI = 0 To UBound($aReqestsArray)-1
$aReqestsArray[$iI][0] = $iI
$aReqestsArray[$iI][1] = 'Группа '&$iI
Next
Global $aArray[200][6] ; тестовый массивчик
For $iI = 0 To UBound($aArray)-1
$aArray[$iI][0] = $iI
$aArray[$iI][1] = 'тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест тест '
$aArray[$iI][2] = 'просто текст просто текст просто текст просто текст просто текст просто текст просто текст просто текст '
$aArray[$iI][3] = '100'
$aArray[$iI][4] = 99
$aArray[$iI][5] = 'проверка'
Next
Example()
Exit
Func Example()
$hForm_ZaprosGUI = GUICreate("ListView Redraw Items", 700, 600)
$hListView_Result = GUICtrlCreateListView("", 2, 70, 670, 500)
$hButton_Refresh = GUICtrlCreateButton("Обновить", 2, 2, 75, 25)
Dim $hForm_ZaprosGUI_AccelTable[1][2] = [["{F5}", $hButton_Refresh]]
GUISetAccelerators($hForm_ZaprosGUI_AccelTable)
$LV = _GUICtrlListView_AddColumn($hListView_Result, "колонка 1")
_GUICtrlListView_AddColumn($hListView_Result, "колонка 2", 200)
_GUICtrlListView_AddColumn($hListView_Result, "колонка 3", 300)
_GUICtrlListView_AddColumn($hListView_Result, "колонка 4")
_GUICtrlListView_AddColumn($hListView_Result, "колонка 5", 100)
_GUICtrlListView_AddColumn($hListView_Result, "колонка 6", 50)
_GUICtrlListView_SetItemCount($hListView_Result, 60000)
RefreshLV()
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
GUIDelete()
ExitLoop
Case $hButton_Refresh
For $i = 0 to 4
ConsoleWrite('Статус группы '&$i&': '& _MyListViewGroupGetCollapse($hListView_Result, $i) &@CRLF)
Next
;~ RefreshLV()
EndSwitch
WEnd
GUIDelete()
EndFunc ;==>Example
Func RefreshLV()
_GUICtrlListView_BeginUpdate($hListView_Result)
_GUICtrlListView_DeleteAllItems ( $hListView_Result )
_GUICtrlListView_RemoveAllGroups ( $hListView_Result )
For $iI = 0 To UBound($aArray)-1
_GUICtrlListView_AddItem($hListView_Result, $aArray[$iI][0], $iI)
For $iJ = 1 To UBound($aArray, 2)-1
_GUICtrlListView_AddSubItem($hListView_Result, $iI, $aArray[$iI][$iJ], $iJ, $iJ )
Next
Next
; создадим группы
For $i=0 To UBound($aReqestsArray)-1
_GUICtrlListView_InsertGroup ($hListView_Result, -1, $i, $aReqestsArray[$i][1])
_GUICtrlListView_SetGroupInfo($hListView_Result, $i, $i+1& '. '&$aReqestsArray[$i][1], 0, $LVGS_COLLAPSIBLE) ; Сделаем группы раскрывающимися
Next
; разнесём результаты по группам
For $i=0 To UBound($aArray)-1
if $i > UBound ($aReqestsArray)-1 Then ExitLoop
_GUICtrlListView_SetItemGroupID($hListView_Result, $i, $aArray[$i][0])
Next
; разрешаем групповой просмотр
_GUICtrlListView_EnableGroupView($hListView_Result, True)
_GUICtrlListView_EndUpdate($hListView_Result)
;~ ; Redraw items
_GUICtrlListView_RedrawItems($hListView_Result, 0, 9)
EndFunc ;==> Refresh
Func _MyListViewGroupGetCollapse($hLVname, $hLVGroupIndex)
;~ $aInfo = _GUICtrlListView_GetGroupInfoByIndex ($hLVname, $hLVGroupIndex)
;~ ConsoleWrite ("Text: " & $aInfo[0] & @TAB& " Group ID: " & $aInfo[2]& @TAB) ;&@CRLF)
; как узнать в каком состоянии группа сейчас? Collapsed или нет?
Return 1
EndFunc ;==> _MyListViewGroupGetCollapse