Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.139.86.56] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Надо выделить самый левый элемент.
Посылаю LVM_SETSELECTIONMARK и 0 ... и ничего не случилось. Да, и это снова на WM6. |
Сообщ.
#2
,
|
|
|
Согласно справке ничего и не должно случиться:
Цитата Но если вы потом вручную нажмёте, скажем, Shift и какой-то элемент далее, то выделятся именно с вашего номера до выбранного. Т.е. выбор всё же осуществляется! Просто надо показ выделения задать явно сообщением LVM_SETITEM и там STATE покрутить. This message does not affect the selection state of the item. |
Сообщ.
#3
,
|
|
|
Дык, я не для себя стараюсь,визуальный эффект мне не обязателен, надо чтобы "чужая" программа заметила мои старания.
|
Сообщ.
#4
,
|
|
|
Да я понимаю, но как-то поторопился написать, что всё просто в том STATE. Скажем, выделен 2-ой, а программно устанавливаю выбраный в 4-ый. И вот на Shift+хвостовой выделяет с четвёртого, а ежели курсором вправо нажму, то идёт на третий, т.е. чихает на выделеный 4-ый. Проблема! Надо колдовать дальше, глубже и тоньше.
|
Сообщ.
#5
,
|
|
|
Может моя проблема не столь глубока.
В начальный момент ничего не выделено. |
Сообщ.
#6
,
|
|
|
LVM_SETITEMSTATE, state = stateMask = LVIS_SELECTED
|
Сообщ.
#7
,
|
|
|
Цитата leo @ Увы, но проверено и не работает. В том плане, что новый выделенный элемент не отмечается, а старый тоже не снимает с себя выделение. И при нажатии стрелок курсора отсчёт продолжается со старого текущего (selected'а), а не с нового. LVM_SETITEMSTATE, state = stateMask = LVIS_SELECTED |
Сообщ.
#8
,
|
|
|
Цитата Славян @ Цитата leo @ и не работает.LVM_SETITEMSTATE, state = stateMask = LVIS_SELECTED Может он про такое копошение в памяти чужого процесса? |
Сообщ.
#9
,
|
|
|
ну и? Вопрос решен не? |
Сообщ.
#10
,
|
|
|
Цитата Славян @ Цитата leo @ Сегодня, 06:47 LVM_SETITEMSTATE, state = stateMask = LVIS_SELECTED Увы, но проверено и не работает Там вроде нужно ставить (LVIS_SELECTED | LVIS_FOCUSED), насколько я помню. ListView_SetItemState(hWnd, i, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); Добавлено А ещё вот такая штука есть ListView_EnsureVisible(hWnd, iItem, FALSE); |
Сообщ.
#11
,
|
|
|
Увы, но и так не канает. Фокус(выделенный элемент) всё равно не переходит, а выделение остаётся на старом элементе.
|
Сообщ.
#12
,
|
|
|
А точно в ListView отправляешь эти сообщения, проверял?
|
Сообщ.
#13
,
|
|
|
Цитата Олег М @ С ней тоже не лучше нисколько. А ещё вот такая штука есть ListView_EnsureVisible(hWnd, iItem, FALSE); |
Сообщ.
#14
,
|
|
|
Цитата Славян @ А ещё вот такая штука есть ListView_EnsureVisible(hWnd, iItem, FALSE); С ней тоже не лучше нисколько. Она должна выводить указанный элемент на экран. Если он уже и так там, то ничего не делает, вроде. У тебя хоть какие-то сообщения работают? Попробуй получить выделенный элемент. |
Сообщ.
#15
,
|
|
|
Цитата Олег М @ Да, конечно. Способ крайне надёжен и прост (намекал на него ранее):А точно в ListView отправляешь эти сообщения, проверял? 1.Открываю ГОСТ-диалог "открыть файл". Узнаю его HWND. Ставлю курсор на 1..2-й элемент (для надёжности). 2.В своей программе говорю выделиться 4-му элементу. 3.Проверяю, нажимая Shift+мышью на каком-нибудь 20-м. Выделяются с 4-го по 20-й. Т.е. система нормально и правильно ставит выделение на заданный 4-й (просто не показывает его текущим=выделенным). 4.А вот если вместо п.3 жму стрелки, то переход идёт на третий элемент (следующий за 2-м), т.е. системе начхать на тот мой 4-й. |