Форум: "Начинающим";
Текущий архив: 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