Важная информация
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 20

Тема: Как "поймать" уход мыши из окна?

  1. #1 Как "поймать" уход мыши из окна? 
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Захватывать курсор не надо. Надо определённым образом среагировать, если курсор мыши оказался в определённой области окна и если покинул эту область, как оказавшись в другой области того же окна, так и оказавшись вообще вне окна. Переход мыши межу областями вроде ловится. Но если мышь вообще уходит из окна, то софтина на это не реагирует. WM_NCMOUSEMOVE не надёжен, так как не всегда приходит при пересечении границы окна.
    Последний раз редактировалось Сионист; 11.03.2017 в 17:17.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  2. #2  
    Модератор
    Регистрация
    19.02.2014
    Сообщений
    403
    Сказал(а) спасибо
    108
    Поблагодарили 303 раз(а) в 191 сообщениях
    Записей в блоге
    36
    TrackMouseEvent, WM_MOUSELEAVE
    UA6527P
    Ответить с цитированием  
     

  3. 3 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (12.03.2017), Free Admin (13.03.2017), Сионист (11.03.2017)

  4. #3  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    А можно без этого:
    C++ Code:
    1. case  WM_MOUSEMOVE         : TrackMouseEvent(&Track);
    2. case  WM_MOUSELEAVE        :
    грязного костыля обойти:
    Вызывающей программе следует уведомить об уходе. Уведомление посылаются как сообщение WM_MOUSELEAVE. Если мышь - не поверх указанного окна или области, уведомление об уходе создается немедленно, и дальнейшее слежение не выполняется.
    ? После того, как мышь пришла, повторный уход надо ведь опять отследить. Можно это за один вызов
    C++ Code:
    1. TrackMouseEvent(&Track);
    сделать?
    Последний раз редактировалось Сионист; 11.03.2017 в 21:23.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  5. #4  
    Модератор
    Регистрация
    19.02.2014
    Сообщений
    403
    Сказал(а) спасибо
    108
    Поблагодарили 303 раз(а) в 191 сообщениях
    Записей в блоге
    36
    Цитата Сообщение от Сионист Посмотреть сообщение
    грязного костыля обойти:
    Делаешь сначала запрос, какое окно отслеживает мышь TME_QUERY. Если это текущее окно, то ничего не делаешь, если не текущее, то это MOUSEENTER - можешь определить свое собственное сообщение WM_MOUSEENTER и отправлять его через SendMessage.
    UA6527P
    Ответить с цитированием  
     

  6. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (12.03.2017), Free Admin (13.03.2017)

  7. #5  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Так, а четыре окна одновременно не могут отслеживать уход мыши? А то вызову я эту функцию, потом мышь переедет в другое окно, которое тоже должно отслеживать уход мыши, оно тоже вызовет эту функцию. Можно гарантировать, что текущее окно получит сообщение об уходе мыши? А
    C++ Code:
    1. case WM_DESTROY: if (CategoriesFlag==1)
    2. {
    3. Track.dwFlags=TME_LEAVE|TME_CANCEL;
    4. TrackMouseEvent(&Track);
    5. }
    6. DeleteObject(Font2);
    7. DeleteObject(Font1);
    8. break;
    глюков точно не вызовет?
    Последний раз редактировалось Сионист; 11.03.2017 в 23:06.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  8. #6  
    Модератор
    Регистрация
    19.02.2014
    Сообщений
    403
    Сказал(а) спасибо
    108
    Поблагодарили 303 раз(а) в 191 сообщениях
    Записей в блоге
    36
    Цитата Сообщение от Сионист Посмотреть сообщение
    потом мышь переедет в другое окно
    И сразу же получишь сообщение WM_MOUSELEAVE и трекинг сбросится. Т.е. как только мышь уйдет с окна трекинг сбросится, у тебя никак не получится сделать трекинг на несколько окон.
    UA6527P
    Ответить с цитированием  
     

  9. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (12.03.2017), Free Admin (13.03.2017)

  10. #7  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Он гарантировано сбросится до вызова
    C++ Code:
    1. TrackMouseEvent(&Track);
    другим окном? А то ведь если после, то сброс в вызове. Или при этом тоже уйдёт сообщение?
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  11. #8  
    Модератор
    Регистрация
    19.02.2014
    Сообщений
    403
    Сказал(а) спасибо
    108
    Поблагодарили 303 раз(а) в 191 сообщениях
    Записей в блоге
    36
    Короче, читай документацию, я все понятно объяснил.
    UA6527P
    Ответить с цитированием  
     

  12. Пользователь сказал cпасибо:

    >Quiet Snow< (12.03.2017)

  13. #9  
    Профи Аватар для nik_1
    Регистрация
    03.08.2014
    Сообщений
    283
    Сказал(а) спасибо
    160
    Поблагодарили 145 раз(а) в 109 сообщениях
    Записей в блоге
    1
    с помощью винайпи функций.
    читай Михаила Фленова "делфи глазами хакера"
    Ответить с цитированием  
     

  14. #10  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Вы ещё бейсик помяните. И вторую модулу с фортом и лого вперемешку.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

Страница 1 из 2 12 ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 10.03.2017, 18:54
  2. Конвертер "Бэйсик" -> "Паскаль" (от Catstail).
    от Апострофф в разделе Разработки на VBA
    Ответов: 4
    Последнее сообщение: 27.04.2015, 18:27
  3. Конвертер "Бэйсик" -> "Паскаль" (от Catstail).
    от Апострофф в разделе Pascal
    Ответов: 0
    Последнее сообщение: 27.04.2015, 16:25
  4. Ответов: 4
    Последнее сообщение: 02.12.2011, 16:39
  5. Ответов: 5
    Последнее сообщение: 24.05.2011, 12:53
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •