Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уход курсора мыши с облости окна


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.
Где-то такое раньше публиковалось


Наверх

Титульная страница Поиск, карта сайта Написать письмо