Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.28;
Скачать: CL | DM;

Вниз

Уход курсора мыши с облости окна   Найти похожие ветки 

 
demon ©   (2008-08-17 18:23) [0]

Посылаються ли в окно какие-небудь сообщения, оповещающие что мышь ушла с окна?
Или как это можно узнать?


 
Smile   (2008-08-17 19:13) [1]

Как отследить выход мыши за пределы формы?
Можно через события 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.
Где-то такое раньше публиковалось


 
demon ©   (2008-08-17 19:34) [2]

Уход мыши этим способом не словишь, только потерю фокуса, по крайней мере у меня так получилась.


 
DVM ©   (2008-08-17 19:48) [3]


> Уход мыши этим способом не словишь,


> по крайней мере у меня так получилась.

вот именно у тебя!


 
demon ©   (2008-08-17 19:52) [4]

Ну, если держать кнопку мыши нажатой постоянно, то в момент выхода мыши за пределы событие генерируеться.
А инача нет.

> DVM
, а что, у вас не так?


 
DVM ©   (2008-08-17 20:04) [5]


> а что, у вас не так?

не так


 
Loginov Dmitry ©   (2008-08-17 23:09) [6]

> Уход мыши этим способом не словишь, только потерю фокуса,
> по крайней мере у меня так получилась.


На деле событие CM_MOUSELEAVE посылается конролу, если есть родительский контрол, способный поймать CM_MOUSEENTER. При расположении элемента на краю формы CM_MOUSEENTER ловить некому, поэтому и CM_MOUSELEAVE не фиксируется. API Windows (ХР по крайней мере) позволяет решить эту задачу, не помню правда, как функции называются (задача исключительно редкая), сам бы решил ее с использованием обычного таймера.


 
DVM ©   (2008-08-17 23:20) [7]


> не помню правда, как функции называются (задача исключительно
> редкая)


TrackMouseEvent()


 
Игорь Шевченко ©   (2008-08-18 00:03) [8]

Нормально ловится, а зачем его надо ловить ? (от ответа на вопрос "зачем" зависит способ решения)


 
demon ©   (2008-08-18 00:28) [9]

Нужно чтобы после ухода мыши с формы, некоторые настройки изменились (точнее, вернулись в дефолтное положение).
Это, конечно можно решить и применением таймера, но уходом мыши вернее, не хотелось бы чтобы контролы меняли положения прямо под мышью.


 
Игорь Шевченко ©   (2008-08-18 00:32) [10]


> Нужно чтобы после ухода мыши с формы, некоторые настройки
> изменились (точнее, вернулись в дефолтное положение).


Переведи.


> уходом мыши вернее, не хотелось бы чтобы контролы меняли
> положения прямо под мышью.


И это тоже переведи


 
Германн ©   (2008-08-18 00:59) [11]


> Игорь Шевченко ©   (18.08.08 00:32) [10]
>
>

Там похоже какая-то жуткая мешанина. Учитывая что спрашивал автор за последнее время.
А перевести он не сможет. Языка не знает. :(


 
demon ©   (2008-08-18 13:37) [12]

Ну, постараюсь перевести, точнее  - подробнее обьяснить задумку:
В окне плеера есть регулятор громкости, но если по нему кликнуть средней клавишей мыши, то он будет регулировать не громкость плеера, а системную громкость. Если кликнуть еще раз средней клавишей - то он станет регулятором громкости плеера (вернеться в то состояние как было до первого клика) .
Так вот, нужно регулятор громкости возвращался в исходное состояние (регулировал громкость поеера) даже если пользователь забыл или "поленился" кликать другой раз.

Ну, вроде разжевал.


 
Игорь Шевченко ©   (2008-08-18 13:47) [13]

demon ©   (18.08.08 13:37) [12]


> Так вот, нужно регулятор громкости возвращался в исходное
> состояние (регулировал громкость поеера) даже если пользователь
> забыл или "поленился" кликать другой раз.


В какой момент регулятор должен возвращаться в исходное положение ? Когда мышь ушла с окна ? Кнопка при этом должна быть нажата ?


 
demon ©   (2008-08-18 14:03) [14]

Нет, кнопки вообще нету на форме, регулятор пахож на прогрессбар, но уход мыши должен быть без нажатых на ней кнопак.

Я кажесь придумал, буду сверять координыты мыши каждые 100 милисек, если она за пределами формы, то верну регулятору громкости исходную функциональность (ну и остановлю проверку координат курсора).
Как такой финт ушами?


 
Vlad Oshin ©   (2008-08-18 14:22) [15]

http://vsokovikov.narod.ru/New_MSDN_API/index_msdn.htm
тут нормально описаны на русском всякие сообщения


 
Игорь Шевченко ©   (2008-08-18 14:26) [16]

demon ©   (18.08.08 14:03) [14]

SetCapture/WM_MOUSEMOVE/ReleaseCapture


 
{RASkov} ©   (2008-08-18 14:32) [17]

http://yandex.ru/yandsearch?text=TrackMouseEvent+%2B+WM_MOUSELEAVE&clid=9582



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

Текущий архив: 2008.09.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
2-1218831398
AlexDan
2008-08-16 00:16
2008.09.28
О StrToFloat


2-1219147309
Andrnow
2008-08-19 16:01
2008.09.28
Работа с COM портом


2-1218714100
Lamer666
2008-08-14 15:41
2008.09.28
Из Excel-я в DbGrid


2-1218777703
Кирей
2008-08-15 09:21
2008.09.28
Что значит ошибка Compilied code for this line is too long


2-1218700387
sD
2008-08-14 11:53
2008.09.28
Как в классе динамически создать компонент?