Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ Программирование мыши

Автор: Bokul 5.01.2007 1:24

А как обрабатывать нестандартную мышь (больше двух кнопок)? У меня, например, есть 5 кнопок + колесико, которое можно крутить и нажимать тремя разными способами, как использовать все возможности?

Автор: Bokul 8.01.2007 0:38

Нашел smile.gif . Копать надо в сторону http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputmessages/wm_appcommand.asp и http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/aboutmouseinput.asp
Хотя это сообщение тоже не поддерживается в Fpc sad.gif

Автор: volvo 8.01.2007 0:53

Покажи, КАК ты его обрабатываешь...

Автор: Bokul 8.01.2007 1:04

Ну как обычно - добавляю WM_APPCOMMAND в callback функцию класса, а потом, в соответствии с lParam параметром сообщения, делаю нужное для меня действие. А что?

P.S. Это план, код я не писал..

Автор: volvo 8.01.2007 1:13

В чем проблема? Не знаем кодов сообщений? smile.gif


const
WM_XBUTTONDOWN = $020B;
WM_XBUTTONUP = $020C;
WM_XBUTTONDBLCLK= $020D;
MOUSE_XBUTTON1 = $0001;
MOUSE_XBUTTON2 = $0002;
blum.gif

Автор: Bokul 8.01.2007 1:22

А для WM_APPCOMMAND и его параметра lParam? rolleyes.gif

P.S. Может создать отдельную тему, посвящённую константам WinApi?

Автор: volvo 8.01.2007 1:33

const
WM_APPCOMMAND = $0319;

APPCMD_FIRST = $8000;
APPCOMMAND_BROWSER_BACKWARD = APPCMD_FIRST +1;
APPCOMMAND_BROWSER_FORWARD = APPCMD_FIRST +2;
APPCOMMAND_BROWSER_REFRESH = APPCMD_FIRST +3;
APPCOMMAND_BROWSER_STOP = APPCMD_FIRST +4;
APPCOMMAND_BROWSER_SEARCH = APPCMD_FIRST +5;
APPCOMMAND_BROWSER_FAVORITES = APPCMD_FIRST +6;
APPCOMMAND_BROWSER_HOME = APPCMD_FIRST +7;
APPCOMMAND_VOLUME_MUTE = APPCMD_FIRST +8;
APPCOMMAND_VOLUME_DOWN = APPCMD_FIRST +9;
APPCOMMAND_VOLUME_UP = APPCMD_FIRST +10;
APPCOMMAND_MEDIA_NEXTTRACK = APPCMD_FIRST +11;
APPCOMMAND_MEDIA_PREVIOUSTRACK = APPCMD_FIRST +12;
APPCOMMAND_MEDIA_STOP = APPCMD_FIRST +13;
APPCOMMAND_MEDIA_PLAY_PAUSE = APPCMD_FIRST +14;
APPCOMMAND_LAUNCH_MAIL = APPCMD_FIRST +15;
APPCOMMAND_LAUNCH_MEDIA_SELECT = APPCMD_FIRST +16;
APPCOMMAND_LAUNCH_APP1 = APPCMD_FIRST +17;
APPCOMMAND_LAUNCH_APP2 = APPCMD_FIRST +18;
APPCOMMAND_BASS_DOWN = APPCMD_FIRST +19;
APPCOMMAND_BASS_BOOST = APPCMD_FIRST +20;
APPCOMMAND_BASS_UP = APPCMD_FIRST +21;
APPCOMMAND_TREBLE_DOWN = APPCMD_FIRST +22;
APPCOMMAND_TREBLE_UP = APPCMD_FIRST +23;
APPCOMMAND_MICROPHONE_VOLUME_MUTE = APPCMD_FIRST +24;
APPCOMMAND_MICROPHONE_VOLUME_DOWN = APPCMD_FIRST +25;
APPCOMMAND_MICROPHONE_VOLUME_UP = APPCMD_FIRST +26;
APPCOMMAND_HELP = APPCMD_FIRST +27;
APPCOMMAND_FIND = APPCMD_FIRST +28;
APPCOMMAND_NEW = APPCMD_FIRST +29;
APPCOMMAND_OPEN = APPCMD_FIRST +30;
APPCOMMAND_CLOSE = APPCMD_FIRST +31;
APPCOMMAND_SAVE = APPCMD_FIRST +32;
APPCOMMAND_PRINT = APPCMD_FIRST +33;
APPCOMMAND_UNDO = APPCMD_FIRST +34;
APPCOMMAND_REDO = APPCMD_FIRST +35;
APPCOMMAND_COPY = APPCMD_FIRST +36;
APPCOMMAND_CUT = APPCMD_FIRST +37;
APPCOMMAND_PASTE = APPCMD_FIRST +38;
APPCOMMAND_REPLY_TO_MAIL = APPCMD_FIRST +39;
APPCOMMAND_FORWARD_MAIL = APPCMD_FIRST +40;
APPCOMMAND_SEND_MAIL = APPCMD_FIRST +41;
APPCOMMAND_SPELL_CHECK = APPCMD_FIRST +42;
APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE = APPCMD_FIRST +43;
APPCOMMAND_MIC_ON_OFF_TOGGLE = APPCMD_FIRST +44;
APPCOMMAND_CORRECTION_LIST = APPCMD_FIRST +45;
APPCOMMAND_MEDIA_PLAY = APPCMD_FIRST +46;
APPCOMMAND_MEDIA_PAUSE = APPCMD_FIRST +47;
APPCOMMAND_MEDIA_RECORD = APPCMD_FIRST +48;
APPCOMMAND_MEDIA_FAST_FORWARD = APPCMD_FIRST +49;
APPCOMMAND_MEDIA_REWIND = APPCMD_FIRST +50;
APPCOMMAND_MEDIA_CHANNEL_UP = APPCMD_FIRST +51;
APPCOMMAND_MEDIA_CHANNEL_DOWN = APPCMD_FIRST +52;
Хватит, или еще чего-то нету?

Да, вот этого не было:
MK_LBUTTON  = $0001;
MK_RBUTTON = $0002;
MK_SHIFT = $0004;
MK_CONTROL = $0008;
MK_MBUTTON = $0010;
MK_XBUTTON1 = $0020;
MK_XBUTTON2 = $0040;

Автор: Bokul 8.01.2007 1:46

Спасибо!!! good.gif
Вот также нашел некоторые константы http://www.delphikingdom.com/asp/messages.asp?prefix=WM, но не все.. sad.gif

Автор: hardcase 15.01.2007 0:24

А ещё есть DirectInput.....
Я через него свой джойстик обрабатывал....

Автор: Bokul 15.01.2007 0:25

Это как? На уровне драйвера?

Автор: hardcase 16.01.2007 3:04

Нет, это часть библиотеки DirectX, есть ещё Direct3D, DirectDraw и другие.

Это естественно, объектно-ориентированная библиотека.
Общий принцип работы с устройствами ввода (клавиатурами, джойстиками, джойпадами, мышами) там сводится к периодическому их опросу, нет встроенной событийной модели.

В сети есть порт С++ заголовков на Delphi (и соответственно совместимых с FPC), правда я его не встречал - не приходилось работать с Direct'ом на Делфи.

Автор: volvo 16.01.2007 3:13

Цитата
В сети есть порт С++ заголовков на Delphi
Не только... На FPC тоже портировали... Не все из Дельфей было совместимо с FPC...

http://www.clootie.ru/fpc/index.html