![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скроллинг колесиком в моих приложениях [D5, WinXP]
марсианин © (2004-03-28 14:41:00)Мужики, как сделать скроллинг не при прокрутке, а при нажатии на колесико? чтоб как Internet Explorer появился кружочек со стрелочками и перемещением мыши осуществлялся плавный скроллинг?
Diamond Cat (2004-03-30 23:44:00) [1]звиняй, протормозил, лови
(краткость - сестра нашего брата)
марсианин (2004-03-30 22:35:00) [2]специально же вписал alexey_go@mail.ru ))
Diamond Cat (2004-03-30 19:03:00) [3]ага , высылаю, а куда слать??? ты в анкете мыло не прописал :о)
Diamond Cat (2004-03-30 19:02:00) [4]
> (хотя можно и черес SetScrollPos, SetScrollInfo)
без мазы, все равно придется дать понять окну владеющему этими скролами, что скрол передвинут, а то скролл-то подвинется а вот окно нет, примерчик высылаю
марсианин (2004-03-30 17:25:00) [5]2Cobalt © (28.03.04 17:34) [1]
я вообще-то на АПИ пишу, нету OnMouseWheel, а сообщение WM_MOUSEWHEEL при нажатии на колесико не посылается -- проверено
мне просто было интересно, существуют ли стандартные средства АПИ поддержки этого явления? или каждое приложение делает это по-своему?
я посмотрел winsight32-ом какие сообщения получает IE при скроллинге, (к сожалению дома смотрел, поэтому лог тоже дома) помню точно, там было какое-то сообщение WM_USER+0x00007C12 кажись, затем повторения WM_TIMER, WM_MOUSEMOVE, WM_SETCURSOR.. WM_H/VSCROLL не замечено..
я сделал как предлагает ПЛОВ
т.е. на WM_MBUTTONDOWN включается таймер, захватывается крыса (SetCapture), запоминается точка куда ткнули, и сам меняю курсор (точне буду менять, потому что еще не нарисовал курсоры, а может есть стандартный???).
каждый тик таймера отслеживается положение курсора относит. исходной точки и вычисляю новые позиции скроллбаров, посылаю WM_H/VSCROLL (хотя можно и черес SetScrollPos, SetScrollInfo)
при любом нажатии останавливаю таймер, ReleaseCapture, исходный курсор...
это работает, пусть криво, но работает... может есть способ сделать это по-изящнее?
2 Diamond Cat © пришли свой вариант, плз, интересно как ты сделал..
Diamond Cat (2004-03-28 23:19:00) [6]я в свое время долго боролся с этим,и выяснил некоторые вещи, котрые шли в разрез с хелпами и msdn-ом, к примеру сообщение wm_mowsewheel, которое генериться при прокрутке колесика мыши, должно иметь в качестве ресультата 0 если все прошло гладко и все остальное если сообщенеие не прошло, так вот большинство окон именно так и делает а к примеру ворд чхает на это и в ответе передает все что его душе придется . к тому же не все окна обрабатывают это сообщение к примеру winsight32, в мсдн пишут , что типа это сообщение пробрасывается по цепочке окон к в сторону родительского, пока не будет обработано, или не достигнет верхнего уровня, а теперь предположим что некоторые особо одаренные написали скрол бар в другой цепочке по отношению к прокручиваемому окну. вобщем полный абзац. Если интересно, могу слить результаты моих попыток, я умудрился добиться примерно 99% срабатываемости. причем в результате я отказался от wm_mousewheel , а пользовался wm_h/vsroll и wm_keyup/down c параметром vk_left/right/up/down/
ПЛОВ (2004-03-28 17:36:00) [7]Просто...
Обрабатываеш нажатие средней кнопки крысы (колесика), меняешь курсор, а дальше замеряя позицию этого самого курсора через апи делаешь прокрутку...
см. GetScrollPos, GetScrollPos и т.п.
Cobalt (2004-03-28 17:34:00) [8]OnMouseWheel