Здравствуйте.
Интересует вопрос, как в Лазарусе получать события от мыши, если мышь находится вне моего окна? Например, нажатие/отпускание кнопки мыши и получение позиции курсора. По аналогии с WM_MOUSEMOVE, WM_LBUTTONDOWN и т.д.
Это нужно для того, чтобы написать программу фиксации щелчка, так как мне нужна такая функция, а найти такую программу под линукс я не могу.
fpGUI пробовали? На крайняк, наверное, можно и с самими иксами работать (X11, Xlib), думаю, модули есть.
З.Ы. Я не спец по Lazarus или Free Pascal, более детально не скажу.
В windows я умею это делать, а в линуксе вообще не знаю никаких API. Знаю, что каждая оболочка держится на иксах, но как с ними взаимодействовать не знаю - вот и спрашиваю. Предполагаю, что у иксов тоже есть какие-то API-функции а-ля WinAPI. Но не могу про это ничего найти.
С языком С я плохо знаком. В винде я начинал его изучать и на нем писать, но мне он показался каким-то не логичным и я остался на Delphi. По-этому, вариант для Lazarus был бы для меня идеальным решением.
Итак, я посмотрел код по последней ссылке. Этот код создает пустое окно, которое закрывается при нажатии любой клавиши. Из кода я понял, что в цикле while true do окно принимает какие-то события. Это некий аналог оконной процедуры винды (уж извиняйте, что сравниваю). Переменная е это событие, которое пришло в данный момент. If e._type=KeyPress then это аналог WM_KEYDOWN. Но как узнать код нажатой клавиши и саму клавишу по коду? У винды есть wparam, содержащий код клавиши. Потом, продав душу сатане, юзаем API и узнаём раскладку клавиатуры и по ней имя клавиши. А здесь это как происходит? Где брать код клавиши? У меня проблема, в основном, именно с этим. Какие существуют события и за что они отвечают. У винды есть MSDN, где всё написано. А у иксов есть что-то подобное? Expose, как я понял, это событие перерисовки окна. А например, какое событие приходит, когда водишь мышь над окном или жмешь на ее кнопки. Где это гуглить?
И по теме - что надо сделать, чтобы окно принимало события мыши, когда мышь находится вне окна? В инете нагуглил, что есть функции типа XGrabPointer, XGrabButton. Но как их применять - не понятно.
Выше я пытался немного прояснить, как тут все работает. Основа системы - это сишные либы, которые уже используются биндингами/компонентами других языков.
Поэтому и сказал, что перечень функций либы можно увидеть в заголовочных файлах.
А справочник по функциям для другого языка следует искать в документации на компоненты или найти книжку вроде этой:
Программирование в X Window средствами Free Pascal
В частности, про клаву и мышь - http://rus-linux.net/MyLDP/BOOKS/ProgrX/xwin-1-3.shtml#1
Про либы я понял. Мне нужен был справочник, какие функции что делают. Предпоследняя ссылка как-раз то, что нужно. Почитал про XSelectInput() и про мышь - понял, как ловить события мыши на своем окне. Но про XGrabButton возник вопрос.
Если я правильно понял, если я вызову XGrabButton(), то в мое окно будут приходить события мыши из окна, указанного в четвертом аргументе при действии кнопки, указанной во втором аргументе XGrabButton(...,button,...,window,...blabla)? Если так, то как задать аргументы, чтобы события кнопки приходили из всех окон?
Отправить комментарий