powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как отловить момент выхода курсора мыши за переделы ДВ?
11 сообщений из 11, страница 1 из 1
Как отловить момент выхода курсора мыши за переделы ДВ?
    #35662960
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сабж собственно ...
Когда использую CaptureMouse(), ReleaseMouse() ДВ начинает вести себя как то странно.
На пример: перестают работать стандартные события GetFocus/LoseFocus, нельзя отобразить Messagebox(...), ...

Если не использовать CaptureMouse(), ReleaseMouse(), то все работает нормально, но выход мыши отловить не могу.
...
Рейтинг: 0 / 0
Как отловить момент выхода курсора мыши за переделы ДВ?
    #35663077
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как отловить момент выхода ?
- самое простое с помощью события маусмув обьекта, на котором лежит дв, или
- с помощью SetCapture/ReleaseCapture, если пишем самостоятельный обьект, но как вы заметили уже, появляется ряд артефактов в поведении, каждый из которых придется отловить. на вскидку - - делать ReleaseCapture на xpos/ypos > width/height < 0 (лучше пользовать GetClientRect датавиндова - минус артефакт поведения на скроллбарах дв и, возможно, заголовка (Именно тут можно сгенерить МоусЛеаве)), перед скриптом, потенциально показывающим МессаджБоксы/Другие окна...
...
Рейтинг: 0 / 0
Как отловить момент выхода курсора мыши за переделы ДВ?
    #35670590
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в mousemove включить таймер и по событию таймера определять значение GetObjectAtPointer()
если пусто или null то мыша ушла за пределы, таймер можно выключать.
...
Рейтинг: 0 / 0
Как отловить момент выхода курсора мыши за переделы ДВ?
    #35671521
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 rcryo
Я тоже думал про такое, но мне это не очень нравится - задержка между запросами таймера.
Хотелось бы более красивое решение ...
...
Рейтинг: 0 / 0
Как отловить момент выхода курсора мыши за переделы ДВ?
    #35672198
sPaul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В dw событии other:

if message.number = 675 then
//out of dw
end if
...
Рейтинг: 0 / 0
Как отловить момент выхода курсора мыши за переделы ДВ?
    #35672410
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не будет оно работать.
...
Рейтинг: 0 / 0
Как отловить момент выхода курсора мыши за переделы ДВ?
    #35672598
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторзадержка между запросами таймера.
сделайте 100-200мс на глаз заметно не будет
У меня по этому принципу сервис hyperlink сделан и не заметно никакой задержки
...
Рейтинг: 0 / 0
Как отловить момент выхода курсора мыши за переделы ДВ?
    #35674998
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ерунда это всёю Нужно использовать следующую API:
Код: plaintext
Function Boolean TrackMouseEvent(Ref TRACKMOUSEEVENT lpTrackMouseEvent) Library 'user32.dll'
и всё будет работать как часы, и GetFocus/LoseFocus, и Messagebox(...)
Прикладываю static text, работающий по этому принципу (проверял и на ДВ)
...
Рейтинг: 0 / 0
Как отловить момент выхода курсора мыши за переделы ДВ?
    #35675972
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп, преогромнейшее спасибо от лица всех страждущих! :)

Хотя мне кажется, что этот метод где то перекликается с предложением rcryo - по принципу работы.
У тебя реализовано ср-вами WinAPI, а там ПБ. Тоже своего рода опрос по таймеру, но может быть я и ошибаюсь.

Еще раз - спасибо.
...
Рейтинг: 0 / 0
Как отловить момент выхода курсора мыши за переделы ДВ?
    #35680424
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп,
Вы на свете всех милее, всех румяней и белее.
Однако вот это:
Код: plaintext
1.
2.
3.
4.
5.
6.
event other;Choose Case Message.Number
	Case WM_MOUSEHOVER
		this.Event MouseHover()
	Case WM_MOUSELEAVE
		this.Event MouseLeave()
End Choose
по моему скромному разумению не есть хорошо, особенно для DW.
...
Рейтинг: 0 / 0
Как отловить момент выхода курсора мыши за переделы ДВ?
    #35680694
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rcryoФилипп,
Вы на свете всех милее, всех румяней и белее.
Однако вот это:
Код: plaintext
1.
2.
3.
4.
5.
6.
event other;Choose Case Message.Number
	Case WM_MOUSEHOVER
		this.Event MouseHover()
	Case WM_MOUSELEAVE
		this.Event MouseLeave()
End Choose
по моему скромному разумению не есть хорошо, особенно для DW.
Абсолютная чепуха...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как отловить момент выхода курсора мыши за переделы ДВ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]