с клавиатурой всё понятно, а с мышью ни чего нет
канвас не предлагать, про него есть
одновременное нажатие клавиш модификаторов и мыши
Сообщений 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 спасибо, славный огород, на все случаи