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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.043 c
2-1219219486
sD
2008-08-20 12:04
2008.09.28
Работа с dxBarManager (DevExpress)


2-1217765489
demon
2008-08-03 16:11
2008.09.28
Второе окно на API


15-1218030673
demon
2008-08-06 17:51
2008.09.28
Посоветуйте литературу по API


15-1217973694
Tricky
2008-08-06 02:01
2008.09.28
Delphi 7 и XP x64


15-1218177214
axis_of_evil
2008-08-08 10:33
2008.09.28
резервная копия данных





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский