Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Вниз

События мыши в ListView   Найти похожие ветки 

 
Ritter   (2005-10-14 23:28) [0]

Приветствую участников форума.

При использовании ListView столкнулся с такой проблемой: при нажатии на левую или правую кнопку мыши процедура, назначенная на событие OnMouseDown вызывается нормально, но OnMouseUp происходит, только если было движение мыши за время, пока была нажата кнопка и курсор переместился на 4 или более пикселей.
Кто-нибудь знает, как это вылечить?

Пробовал перемещать курсор функцией SetCursorPos – не помогает, если курсор возвращать в первоначальную точку. Интересно, что в случае со средней кнопкой проблема не проявляется.

И еще один вопрос: можно ли в LV увеличить частоту возникновения события OnMouseMove (или привязать ее к определенной дистанции перемещения)? Необходимо применять определенные действия к элементам LV, находящимся под курсором, а при имеющейся частоте, если двигать мышь быстро, некоторые элементы пропускаются.


 
Vladimir Kladov   (2005-10-15 16:25) [1]

что-то такое недавно было. Но частота тут не при чем. Что-то мне кажется сам listview так нехорошо себя ведет. А насчет пропуска событий - это вообще неверно, так делать не надо. система имеет право посылать столько WM_MOUSEMOVE, сколько успевает - это ее прерогатива. Правильно будет - выделить элементы, что-то еще нажать, чтобы с ними что-то сделалось.


 
Ritter   (2005-10-15 18:45) [2]

Что-то мне кажется сам listview так нехорошо себя ведет.

Похоже, так и есть. Вот что нашел в документации по ListView:

Default List View Message Processing

WM_LBUTTONDOWN
Processed in different ways depending on whether a click or drag operation is being initiated. To determine which operation is involved, the list view control enters a modal message loop until either the button is released or the mouse is moved

WM_RBUTTONDOWN
Processed the same way as the WM_LBUTTONDOWN message, except that the control sends an NM_RCLICK notification message (instead of NM_CLICK) and an LVN_BEGINRDRAG notification message (instead of LVN_BEGINDRAG). Note that the control processes the corresponding WM_RBUTTONUP message, and does not dispatch it. Applications thus cannot see this message, even by subclassing the control


Про WM_MBUTTONDOWN ничего не сказано – соответственно выполняется стандартная обработка. Про «мертвую зону» в 4 пиксела тоже ничего не сказано.

Может есть другой способ отловить момент, когда кнопка мыши была отпущена?

…система имеет право посылать столько WM_MOUSEMOVE, сколько успевает - это ее прерогатива. Правильно будет - выделить элементы, что-то еще нажать, чтобы с ними что-то сделалось…

В том то и дело, что мне нужно выделить элементы в OwnerDraw LV дополнительно к основному выделению курсором (Пример: выделение файлов правой кнопкой в большинстве файл-менеджеров). Сделал так: запоминаем последний выделенный элемент, при вызове OnMouseMove, если кнопка не отпущена – выделяем все элементы, начиная со следующего после того, который записан и заканчивая текущим. Естественно, пока это работает нормально только со средней кнопкой.



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
15-1148565801
dimodim-furyz
2006-05-25 18:03
2006.06.25
StaffCop.У когонить есть решение этой чумы?


2-1149604960
Alex>
2006-06-06 18:42
2006.06.25
Массив записей


8-1137721293
STK
2006-01-20 04:41
2006.06.25
Как использовать компоненты для файлов tiff


1-1147925148
apl
2006-05-18 08:05
2006.06.25
Как преобразовать TFileTime


1-1147685021
QuickFinder
2006-05-15 13:23
2006.06.25
Дерево данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский