Что нового

Странное поведение _GUICtrlListView_FindText()

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
The Dream
Почему структура из 10 int? Там ещё что-то хранится? _GUICtrlListView_GetItemParam может хранить длинное int. По крайней мере для ptr хватит, а в структуре ему достаточно одного int
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
CreatoR, все верно, я об это тоже думал. Но это было сделано только для потенциального использование в будущем. Присвоил ф-цию на меню и все. Проверил, работает - и все. Больше не использовал. Я просто писал механизм программы, потом оболочку, и только когда все работает стабильно - довожу до ума меню, кнопки. Под стабильностью я имел ввиду именно взаимодействие механизмов с списком listview. Можно еще развернуть вопрос на то, что передается в потоках к программе от дочерних процессов (по StdoutRead/StdinWrite) - но там тоже все "чисто", передаются строки, что не не строка - все перевожу в строку, если не уверен что в переменной что-то есть - проверяю. Проверял каждый квадратный см. Я бы создал пример, честное слово, но поверьте нет условий.


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

AZJIO [?]
Почему структура из 10 int? Там ещё что-то хранится? _GUICtrlListView_GetItemParam может хранить длинное int. По крайней мере для ptr хватит, а в структуре ему достаточно одного int

В этом деле я новичок, в структурах, вернее по части массивов в них. Но там хранится массив из цвета sub-item. То есть [sub-item][color] :smile:
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
The Dream
Если там цвет, а цвет это число int, то не проще ли записать так:
Код:
$iColor = _GUICtrlListView_GetItemParam($hWndFrom, $iItem)
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
AZJIO, там цвет каждого sub-item-a, их у меня 8 (8 column).
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Структуры созданы в глобальной области видимости?
Я в предыдущей теме по этому же скрипту предлагал массивы. Генерируется массив по размеру ListView и заполняется цветами-числами, а в _GUICtrlListView_GetItemParam хранится индекс на строку. Всё тоже самое но доступ на мой взгляд проще.
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
AZJIO может и проще, но с массивами у меня трудно немного. Понимаю, просто кому что.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Код:
Local $iItem = _GUICtrlListView_FindText($hListView, $sUrl,0,0)
Почему третий параметр 0? При 0 он будет искать кроме 0.
$iStart [необязательный] Индекс, от которого начинать поиск или -1, чтобы искать с самого начала. Указанный элемент исключается из поиска.

Пример с массивом
Код:
; Оригинал
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
	$pParam = _GUICtrlListView_GetItemParam($hWndFrom, $iItem)
	$tParam = DllStructCreate('int[10]', $pParam) ; Две строки с функционалом массива в одной строке
	$iColor = DllStructGetData($tParam, 1, $iSubItem + 1)
	If $iColor = 0 Then $iColor = 0xFDFFB9
	DllStructSetData($tNMLVCD, 'clrTextBk', _BGRColor($iColor))
	Return $CDRF_NEWFONT
								
; Создание массива
Global $aiColor[10] = [0xFDFFB9, 0xFDFFB9, 0xFDFFB9, 0xFDFFB9, 0xFDFFB9, 0xFDFFB9, 0xFDFFB9, 0xFDFFB9, 0xFDFFB9, 0xFDFFB9]

; Вариант с массивом
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
	$aiColor = _GUICtrlListView_GetItemParam($hWndFrom, $iItem)
	$iColor = $aiColor[$iSubItem + 1] ; И то это строку можно считать лишней, так как можно использовать саму ячейку
	If $iColor = 0 Then $iColor = 0xFDFFB9
	DllStructSetData($tNMLVCD, 'clrTextBk', _BGRColor($iColor))
	Return $CDRF_NEWFONT

; или даже так
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
	$aiColor = _GUICtrlListView_GetItemParam($hWndFrom, $iItem)
	If $aiColor[$iSubItem] = 0 Then $aiColor[$iSubItem] = 0xFDFFB9
	DllStructSetData($tNMLVCD, 'clrTextBk', _BGRColor($aiColor[$iSubItem]))
	Return $CDRF_NEWFONT
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
AZJIO, спасибо за разъяснения.

Это я не использовал, это я записал чтобы не забыть спросить на форуме. Я о:

Код:
Local $iItem = _GUICtrlListView_FindText($hListView, $sUrl,0,0)


Всегда было так:

Код:
Local $iItem = _GUICtrlListView_FindText($hListView, $sUrl)
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
AZJIO, спасибо. Знал бы, что здесь настолько отзывчивые - обратился бы раньше, приятно удивлен :smile:
 
Верх