![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Уход курсора мыши с облости окна
demon © (2008-08-17 18:23:00)Посылаються ли в окно какие-небудь сообщения, оповещающие что мышь ушла с окна?
Или как это можно узнать?
{RASkov} (2008-08-18 14:32:00) [1]http://yandex.ru/yandsearch?text=TrackMouseEvent+%2B+WM_MOUSELEAVE&clid=9582
Игорь Шевченко (2008-08-18 14:26:00) [2]demon © (18.08.08 14:03) [14]
SetCapture/WM_MOUSEMOVE/ReleaseCapture
Vlad Oshin (2008-08-18 14:22:00) [3]http://vsokovikov.narod.ru/New_MSDN_API/index_msdn.htm
тут нормально описаны на русском всякие сообщения
demon (2008-08-18 14:03:00) [4]Нет, кнопки вообще нету на форме, регулятор пахож на прогрессбар, но уход мыши должен быть без нажатых на ней кнопак.
Я кажесь придумал, буду сверять координыты мыши каждые 100 милисек, если она за пределами формы, то верну регулятору громкости исходную функциональность (ну и остановлю проверку координат курсора).
Как такой финт ушами?
Игорь Шевченко (2008-08-18 13:47:00) [5]demon © (18.08.08 13:37) [12]
> Так вот, нужно регулятор громкости возвращался в исходное
> состояние (регулировал громкость поеера) даже если пользователь
> забыл или "поленился" кликать другой раз.
В какой момент регулятор должен возвращаться в исходное положение ? Когда мышь ушла с окна ? Кнопка при этом должна быть нажата ?
demon (2008-08-18 13:37:00) [6]Ну, постараюсь перевести, точнее - подробнее обьяснить задумку:
В окне плеера есть регулятор громкости, но если по нему кликнуть средней клавишей мыши, то он будет регулировать не громкость плеера, а системную громкость. Если кликнуть еще раз средней клавишей - то он станет регулятором громкости плеера (вернеться в то состояние как было до первого клика) .
Так вот, нужно регулятор громкости возвращался в исходное состояние (регулировал громкость поеера) даже если пользователь забыл или "поленился" кликать другой раз.
Ну, вроде разжевал.
Германн (2008-08-18 00:59:00) [7]
> Игорь Шевченко © (18.08.08 00:32) [10]
>
>
Там похоже какая-то жуткая мешанина. Учитывая что спрашивал автор за последнее время.
А перевести он не сможет. Языка не знает. :(
Игорь Шевченко (2008-08-18 00:32:00) [8]
> Нужно чтобы после ухода мыши с формы, некоторые настройки
> изменились (точнее, вернулись в дефолтное положение).
Переведи.
> уходом мыши вернее, не хотелось бы чтобы контролы меняли
> положения прямо под мышью.
И это тоже переведи
demon (2008-08-18 00:28:00) [9]Нужно чтобы после ухода мыши с формы, некоторые настройки изменились (точнее, вернулись в дефолтное положение).
Это, конечно можно решить и применением таймера, но уходом мыши вернее, не хотелось бы чтобы контролы меняли положения прямо под мышью.
Игорь Шевченко (2008-08-18 00:03:00) [10]Нормально ловится, а зачем его надо ловить ? (от ответа на вопрос "зачем" зависит способ решения)
DVM (2008-08-17 23:20:00) [11]
> не помню правда, как функции называются (задача исключительно
> редкая)
TrackMouseEvent()
Loginov Dmitry (2008-08-17 23:09:00) [12]> Уход мыши этим способом не словишь, только потерю фокуса,
> по крайней мере у меня так получилась.
На деле событие CM_MOUSELEAVE посылается конролу, если есть родительский контрол, способный поймать CM_MOUSEENTER. При расположении элемента на краю формы CM_MOUSEENTER ловить некому, поэтому и CM_MOUSELEAVE не фиксируется. API Windows (ХР по крайней мере) позволяет решить эту задачу, не помню правда, как функции называются (задача исключительно редкая), сам бы решил ее с использованием обычного таймера.
DVM (2008-08-17 20:04:00) [13]
> а что, у вас не так?
не так
demon (2008-08-17 19:52:00) [14]Ну, если держать кнопку мыши нажатой постоянно, то в момент выхода мыши за пределы событие генерируеться.
А инача нет.
> DVM
, а что, у вас не так?
DVM (2008-08-17 19:48:00) [15]
> Уход мыши этим способом не словишь,
> по крайней мере у меня так получилась.
вот именно у тебя!
demon (2008-08-17 19:34:00) [16]Уход мыши этим способом не словишь, только потерю фокуса, по крайней мере у меня так получилась.
Smile (2008-08-17 19:13:00) [17]Как отследить выход мыши за пределы формы?
Можно через события OnMouseEnter/OnMouseLeave:
TYourObject = class(TAnyControl)
...
private
FMouseInPos : Boolean;
procedure CMMouseEnter(var AMsg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var AMsg: TMessage); message CM_MOUSELEAVE;
...
end;
implementation
procedure TYourObject.CMMouseEnter(var AMsg: TMessage);
begin
FMouseInPos := True;
Refresh;
end;
procedure TYourObject.CMMouseLeave(var AMsg: TMessage);
begin
FMouseInPos := False;
Refresh;
end;
Затем считывать параметр FMouseInPos.
Где-то такое раньше публиковалось