с клавиатурой всё понятно, а с мышью ни чего нет
канвас не предлагать, про него есть
одновременное нажатие клавиш модификаторов и мыши
Сообщений 1 страница 7 из 7
Поделиться114.07.2022 07:26:55
Поделиться218.07.2022 10:29:35
с клавиатурой всё понятно, а с мышью ни чего нет
канвас не предлагать, про него есть
Так в обработчике надо при событии мыши проверять wparam,lparam и смотреть была ли клавиша нажата допустим ctrl
Поделиться319.07.2022 07:09:58
Так в обработчике надо при событии мыши проверять wparam,lparam и смотреть была ли клавиша нажата допустим ctrl
ну и как всё это правильно сделать
Поделиться419.07.2022 10:26:08
ну и как всё это правильно сделать
Тут наверное ещё вопрос в том если сначала клавиша модификатор нажимается а потом клик мыши тогда возможно и можно посмотреть в wparam, lparam а если наоборот?,тогда наверное только переменную статическую или глобальную делать и в нее писать=допустим нажали ctrl это 1
Если клик далее будет левой то if 1,то это уже 2,else правой то это 3 endif и таким мокаром
На остальные комбинации которые нужны.
Поделиться519.07.2022 13:40:51
При событии нажатии мыши проверить нажата ли одна из кнопок модификаторов.
KeyboardPushed(KeyID)
Поделиться619.07.2022 21:41:51
EnableExplicit Declare MouseHook(nCode, wParam, lParam) Define lpdwProcessId, hhkLLMouse, i Global hGUI Procedure MouseHook(nCode, wParam, lParam) Protected *MHS.MOUSEHOOKSTRUCT = lParam Protected bcontrol, balt, bshift, Pressed$ Static ChangingID ; = MOUSEHOOKSTRUCT = ; pt.POINT ; hwnd.i ; wHitTestCode.l ; dwExtraInfo.i bcontrol = GetAsyncKeyState_(#VK_CONTROL) balt = GetAsyncKeyState_(#VK_MENU) bshift = GetAsyncKeyState_(#VK_SHIFT) If bcontrol Pressed$ + "CTRL +" EndIf If balt Pressed$ + "ALT +" EndIf If bshift Pressed$ + "SHIFT +" EndIf Select wParam Case #WM_LBUTTONUP Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Left Mouse UP" Case #WM_LBUTTONDOWN Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Left Mouse Down" Case #WM_LBUTTONDBLCLK Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Left Mouse DblClicked" Case #WM_RBUTTONUP Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Right Mouse UP" Case #WM_RBUTTONDOWN Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Right Mouse Down" Case #WM_RBUTTONDBLCLK Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Right Mouse DblClicked" Case #WM_MBUTTONUP Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Middle Mouse UP" Case #WM_MBUTTONDOWN Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Middle Mouse Down" Case #WM_MBUTTONDBLCLK Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Middle Mouse DblClicked" ; === click in a non-client area === ; Case #WM_NCLBUTTONUP ; Case #WM_NCLBUTTONDOWN ; Case #WM_NCLBUTTONDBLCLK ; Case #WM_NCRBUTTONUP ; Case #WM_NCRBUTTONDOWN ; Case #WM_NCRBUTTONDBLCLK ; Case #WM_NCMBUTTONUP ; Case #WM_NCMBUTTONDOWN ; Case #WM_NCMBUTTONDBLCLK ; === additional mouse button === ; Case #WM_XBUTTONUP ; Case #WM_XBUTTONDOWN ; Case #WM_XBUTTONDBLCLK Case #WM_MOUSEWHEEL Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" "+Pressed$+" Mouse wheel" Case #WM_MOUSEMOVE If *MHS\hwnd <> hGUI And ChangingID <> *MHS\hwnd ChangingID = *MHS\hwnd Debug "Gadget "+Str(GetDlgCtrlID_(*MHS\hwnd))+" Changing" EndIf EndSelect EndProcedure hGUI = OpenWindow(0,0,0,600,400,"", #PB_Window_SystemMenu| #PB_Window_ScreenCentered) For i = 0 To 9 ButtonGadget(i,10,i * 30,80,25,Str(i)) Next lpdwProcessId = GetWindowThreadProcessId_(WindowID(0), 0) hhkLLMouse = SetWindowsHookEx_(#WH_MOUSE, @MouseHook(), GetModuleHandle_(0), lpdwProcessId) Repeat Select WaitWindowEvent() Case #PB_Event_CloseWindow UnhookWindowsHookEx_(hhkLLMouse) Break EndSelect ForEver
Поделиться721.07.2022 06:37:08
Lin спасибо, славный огород, на все случаи