Что нового

Определить id пункта в TreeView

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Столкнулся с такой, как мне кажется, нелогичностью по работе с TreeView
Для работы функции
Код:
_GUICtrlTreeView_SetItemParam

нужен дескриптор пункта, назначаем параметр(значение) пункту.
теперь обратно - мне нужно получить этот параметр. для этого используется функция
Код:
_GUICtrlTreeView_GetItemParam

и вот тут косяк. эта функция требует ID пункта, дескриптор не подходит. не нашел среди функций библиотеки как определить ID по дескриптору.
Вот в этом и вопрос.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
У TreeView нет ID, каждый элемент (пункт) имеет свой дескриптор.
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
и как быть?почему функция
Код:
_GUICtrlTreeView_GetItemParam

требует id, а его самого нет. как по-другому получить параметр пункта?


Добавлено:
Сообщение автоматически объединено:

вобщем, ошибка у меня. нельзя параметром использовать строку. хотя функция установки параметра и возвращает успех, на самом деле устанавливает параметр в виде нуля. параметр это всегда число. видимо слово "параметр" автоматически подразумевает число, а не строку. в контексте справки по TreeWiew :smile:
в итоге, достаточно дескриптора TreeWiew чтобы получить параметр выделенного пункта. сам id там и как хвост не нужен. выделен пункт, получил параметр, нет выделенного - получил ложь в ответ
id пункта получаем если создаем пункт при помощи функции
Код:
GUICtrlCreateTreeViewItem

а так как я использую другую функцию, то отсюда и непонятка
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
joiner [?]
как по-другому получить параметр пункта?
ИМХО, в справках ошибка (опечатка). Используйте дескриптор (handle).



Добавлено:
Сообщение автоматически объединено:

joiner [?]
параметр это всегда число
Попробуйте давать параметром ptr структуры или индекс в структуре (массиве).
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Мой вердикт. Функции _GUICtrlTreeView_SetItemParam() и _GUICtrlTreeView_GetItemParam() принимают хэндл элемента, это хорошо видно в исходниках. Но вот только _GUICtrlTreeView_GetItemParam() написана через ж***. Если в функцию передается ID TreeView, то ничего не работает, если передается хэндл TreeView, то все работает прекрасно.

Код:
#Include <GUITreeView.au3>

GUICreate('MyGUI', 200, 300)
$TV = GUICtrlCreateTreeView(0, 0, 200, 300)
For $i = 1 To 9
	_GUICtrlTreeView_SetItemParam($TV, _GUICtrlTreeView_Add($TV, Null, 'Item' & $i), $i * 1000)
Next
GUISetState()

$hItem = _GUICtrlTreeView_GetFirstItem($TV)
While $hItem
;	ConsoleWrite('Handle: ' & $hItem & ', Param: ' & _GUICtrlTreeView_GetItemParam($TV, $hItem) & @CRLF)
	ConsoleWrite('Handle: ' & $hItem & ', Param: ' & _GUICtrlTreeView_GetItemParam(GUICtrlGetHandle($TV), $hItem) & @CRLF)
	$hItem = _GUICtrlTreeView_GetNext($TV, $hItem)
WEnd

Do
Until GUIGetMsg() = -3
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
точно. значит моя ошибка была в том, что передавал строку - это я понял.
но в справке неточность - передаем дескриптор пункта а не id. хотя, как выяснилось, если не указывать дескриптор , то получим параметр выделенного пункта, если нет выделенного, получаем ложь в ответ
друзья, спасибо за разъяснения.
 
Верх