powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Синхронизация двух ListView
8 сообщений из 8, страница 1 из 1
Синхронизация двух ListView
    #36287935
Guest22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё вроде понятно, кроме:
1.
Как отловить событие скролла? Ну, может быть через сабклассинг отловлю. Тогда:
2.
Как передать это событие на второй контрол?
Или вместо этого:
Как узнать свойство типа TopItem первого ListView и задать его второму?

Ткните куда-нибудь.
Спасибо.
...
Рейтинг: 0 / 0
Синхронизация двух ListView
    #36301350
Guest22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По синхронизации двух листвью нашел недурной пример:
http://vbnet.mvps.org/index.html?code/subclass/lvscrollbars.htm

Но не все там устраивает.
Как тупо установить GetFirstVisible? Он только на чтение.
Какой сендмессеж послать, чтобы листвью встал в нужную позицию?
...
Рейтинг: 0 / 0
Синхронизация двух ListView
    #36301363
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SendMessage для этого не нужно. EnsureVisible.

Jah loves you.
...
Рейтинг: 0 / 0
Синхронизация двух ListView
    #36301438
Guest22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EnsureVisible просто показывает элемент в видимой области, но это не гарантирует того, что нужный мне элемент будет верхним в этой области.
Я же хочу добиться, чтобы FirstVisible обоих контролов был одинаковым.
...
Рейтинг: 0 / 0
Синхронизация двух ListView
    #36301666
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не вижу проблемы. Если нужный элемент уехал наверх, то достаточно сделать EnsureVisible ему.
Если вниз, нужно рассчитать, столько строк помещается в ListView, прибавить это число к индексу нужного элемента и сделать видимым элемент с индексом равным этому числу.

Иногда решений в духе "сделать зашибись" не существует, тренируйте мозг.

Jah loves you.
...
Рейтинг: 0 / 0
Синхронизация двух ListView
    #36302254
Guest22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariyтренируйте мозг.Глупость какая звучит, когда нечего ответить.
Я сообщу Джуджу

А про EnsureVisible я уже сказал, нигде не написано, что это гарантирует выставление правильной позиции.
Гарантируется только, что итем окажется в видимой области.
Фик его знает, может я буду подразумевать, что произойдет подвижка на одну линию, а винда прокрутит полэкрана...

Должно же быть изящное решение, а не такое топорное.
...
Рейтинг: 0 / 0
Синхронизация двух ListView
    #36302617
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы на форум за советом пришли или блеснуть объемом прочитанного? Гарантирую, если искомый айтем уехал наверх, то при EnsureVisible он станет самым верхним, если вниз - самым нижним, random при этом не используется. Остальное дело техники. . Предложенное мной решение самое простое и проверенное по крайней мере для lvwReport. Для других режимов формулы другие. А Джуджу только и делать нечего, как анонимусам сопли вытирать.
...
Рейтинг: 0 / 0
Синхронизация двух ListView
    #36303424
Guest v.22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кароче, вот самое простое решение, пишу, если кто сюда зайдет:
Код: plaintext
SendMessage ListView2.hwnd, LVM_SCROLL,  0 , ByVal (ListView1.GetFirstVisible.Index - ListView2.GetFirstVisible.Index) * hItem
Перемещает на заданное число позиций. Ну, собственно, то же самое, что и установить на заданную позицию.
hItem - высота итема в пикселах, можно взять из какого-нибудь LISTINFO, либо посмотреть в фотошопе , у меня для шрифта 8pt получилось 14 пикселей.

Кстати, еще:
В сабклассинге лучше отлавливать не WM_VSCROLL и WM_WHEEL, а uMsg = 78, не знаю, что это за константа, выловил в дебаге.принт.
Тогда синхронизация будет происходить не по отпусканию кнопки мыши, а сразу, что особенно хорошо видно при перетаскивании мышью бегунка.
Кроме того отлавливаются и перемещения по итемам с помощью клавиатуры.

Всем приятного просмотра.
Ура, товарищи.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Синхронизация двух ListView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]