DyadyaGenya
Знающий
- Сообщения
- 300
- Репутация
- 10
Доброго времени суток. Пробую получить состояние выбора списка с чекбоксами. Сразу скажу, что в приведенном примере куча незакоментированных попыток в моем Case $ListView1. Так же пробовал менять $ListView1 на некоторые другие переменные из скрипта, но без результата. К сожалению в справке так и не нашел способ как прочитать состояние чекбокса, если он вставлен в список с помощью сочетания стилей.
Так же не понятно, можно ли первой строке "Выбрать все" добавить свой чекбокс. Если можно, то как.
Что-то я не подумал заглянуть в описание функций с ListView, поэтому наверно и не могу получить нужные мне значения. Но слегка продвинулся. Сделал так:
Так реагирует на самый первый пункт, и он естественно False, потому что нет чекбокса возле него. На остальные не реагирует.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <RGBHumanConstants.au3>
#include <WinAPI.au3>
#include <Array.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
Global $aChek[0]
$hGui = GUICreate("Окно с чекбоксами", 400, 400) ; Создаёт окно в центре экрана
Global $ListView1 = GUICtrlCreateListView("Выбрать все", 10, 10, 200, 200, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_FLATSB))
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 178)
Global $Box = _GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
GUISetState() ; показывает созданное окно
_AddLVItems()
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $ListView1
ConsoleWrite('нажато *выбрать все* тоесть первая строка без чекбокса' & @CR)
$iMenuState = GUICtrlRead($ListView1) ; возвращает состояние пункта меню
$sMenuText = GUICtrlRead($ListView1, 1) ; возвращает текст пункта меню
ConsoleWrite($iMenuState & '|' & $iMenuState & @CR)
_ArrayDisplay($Box)
_IsChecked($chek)
$Select = ControlCommand($hGui, $aChek,"GetCurrentSelection", "")
ConsoleWrite($Select & @CR)
EndSwitch
WEnd
Func _AddLVItems()
$aText = StringSplit(StringStripWS(StringReplace(FileRead(@ScriptDir & '\test.txt'), @CR, ' '), 4), ' ')
For $n = 1 To $aText[0]
Global $chek = _GUICtrlListView_AddItem($ListView1, $aText[$n])
_ArrayAdd($aChek, $aText[$n])
Next
EndFunc ;==>_AddLVItems
;проверка чекбокса обычного
Func _IsChecked($idControlID)
Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc ;==>_IsChecked
Сообщение автоматически объединено:
Что-то я не подумал заглянуть в описание функций с ListView, поэтому наверно и не могу получить нужные мне значения. Но слегка продвинулся. Сделал так:
Код:
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $ListView1
ConsoleWrite($hWnd & @CR)
ConsoleWrite('нажато *выбрать все* тоесть первая строка без чекбокса' & @CR)
ConsoleWrite(_GUICtrlListView_GetItemChecked($ListView1, 1) & @CR)
EndSwitch
WEnd
Так реагирует на самый первый пункт, и он естественно False, потому что нет чекбокса возле него. На остальные не реагирует.
Последнее редактирование: