Что нового

Элементы GUI _GUICtrlListView_ClickItem выбор определённой ячейки

FrecKDancE

Новичок
Сообщения
19
Репутация
1
Создал таблицу с помощью _GUICtrlListView, заполняется всё как надо, но не могу разобраться как взаимодействовать с определённой ячейкой.
Код:
        case $Button44

    ; Создаёт GUI
    GUICreate("ListView - Клик на пункте", 400, 300)
    $hListView = GUICtrlCreateListView("", 2, 2, 394, 268)
    GUISetState()

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    ; Добавляет колонки
    _GUICtrlListView_InsertColumn($hListView, 0, "Название", 120)
    _GUICtrlListView_InsertColumn($hListView, 1, "Цена маркета", 120)
    _GUICtrlListView_InsertColumn($hListView, 2, "Цена из файла", 120)

            $http10 = $http1&$apikey
            $http20 = BinaryToString(InetRead($http10,4))
            $aItems = StringRegExp($http20, '(?:"classid|market_hash_name)":"?([^"]+)', 3)
            $iItems = UBound($aItems)
            $a = 0
               For $i = 0 To $iItems - 1 Step 2
               $classid = $aItems[$i]
               $hash_name = (($i + 1 < $iItems) ? $aItems[$i + 1] : '')
               $http30 = "https://market.csgo.com/api/v2/search-list-items-by-hash-name-all?key="&$apikey&"&list_hash_name[]="&$hash_name
               $http40 = BinaryToString(InetRead($http30,4))
               $price_market = StringRegExpReplace($http40,'(?s).*?price":"([^"]+).*','\1',1)
               $set_price_market_file = IniWrite( @ScriptDir&"\items\"&$classid&".ini", "General", "price_market", $price_market )
               $price_market_file = IniRead( @ScriptDir&"\items\"&$classid&".ini", "General", "price_market", "0" )
               $min_price = IniRead( @ScriptDir&"\items\"&$classid&".ini", "General", "min_price", "0" )

                _GUICtrlListView_AddItem($hListView, $hash_name, $a)
                _GUICtrlListView_AddSubItem($hListView, $a, $price_market, 1, 1)
                _GUICtrlListView_AddSubItem($hListView, $a, $min_price, 2, 2)

               $a += 1

            next

    ; Цикл выполняется, пока окно не будет закрыто
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
Код:
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                Case $NM_DBLCLK ; Высылается элементом ListView, когда пользователь делает двойной клик на пункте левой кнопкой мыши
                    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
                            InputBox(@ScriptName, "Название: "&$hash_name&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&"Строка ввода не может быть пустой!",""," M",500,200)
                EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc
Действие выполняется при двойном нажатие на ячейку, НО открывается InputBox, в котором информация о последней ячейке таблицы, а не о той, на которую нажал.
Данные для заполнения информации в таблицу берутся с сайта или из файла. В скрипте никакой информации нет.
Собственно вопрос: Как сделать проверку на определённую ячейку? Чтобы открывался InputBox с нужной информацией.
 

Вложения

  • Безымянный1111.png
    Безымянный1111.png
    12.4 КБ · Просмотры: 5

vovsla

Осваивающий
Сообщения
607
Репутация
36
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) нужен для определения нажатой клавиши на клавиатуре, для получения данных при нажатии мышкой можно использовать _GUICtrlListView_GetItemTextArray
 
Автор
F

FrecKDancE

Новичок
Сообщения
19
Репутация
1
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) нужен для определения нажатой клавиши на клавиатуре, для получения данных при нажатии мышкой можно использовать _GUICtrlListView_GetItemTextArray
Спасибо за подсказку. Сделал чуть по другому, через _GUICtrlListView_GetItemText.
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
Спасибо за подсказку. Сделал чуть по другому, через _GUICtrlListView_GetItemText.
Пожалуйста, по сути это одно и то же, GetItemText возвращает значение одной ячейки, а GetItemTextArray возвращает значения всех ячеек в строке
 
Верх