Seite 1 von 1
Strg + Button-Druck
Verfasst: 23.10.2020 08:46
von Velindos
Hallo Leute,
möchte gerne mit dem Drücken der Taste Strg + Button Druck eine Funktion auslösen!
AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_F, 15)
Dient zum Auslösen von Strg+F, wie ist das mit Button oder geht das nicht?
Gruss ... Velindos!
Re: Strg + Button-Druck
Verfasst: 23.10.2020 09:13
von HeX0R
#PB_Shortcut_Print ?
Re: Strg + Button-Druck
Verfasst: 23.10.2020 11:48
von Velindos
Hallo,
mal ein Beispiel wie es sein könnte!
Code: Alles auswählen
; Strg + Button-Druck
Enumeration
#Wnd
#Btn
#ESC_Velindos
EndEnumeration
; -------
OpenWindow(#Wnd, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
ButtonGadget(#Btn,10,10,180,250,"Strg + LCLK Mouse")
AddKeyboardShortcut(#Wnd, #PB_Shortcut_Control |#PB_Shortcut_F, #ESC_Velindos)
; Hier sollte er mit Button auslösen
AddKeyboardShortcut(#Wnd, #PB_Shortcut_Control |#Btn, #ESC_Velindos)
; -------
;-REPEAT
Define EventID
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
;{ Event CloseWindow
End
;}
Case #PB_Event_Menu
;{ Event Menu
Select EventMenu()
Case #ESC_Velindos
End
EndSelect
;}
EndSelect
ForEver
; -------
Funzt aber nicht!
Gruss ... Velindos!
Re: Strg + Button-Druck
Verfasst: 23.10.2020 12:23
von HeX0R
O.k., ich denke ich hab's gerafft, Du möchtest einen Strg-Click auf einem Button-Gadget abfragen?
Das geht so nicht, das ginge mit ein wenig API
Code: Alles auswählen
; Strg + Button-Druck
Enumeration
#Wnd
#Btn
#ESC_Velindos
EndEnumeration
; -------
OpenWindow(#Wnd, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
ButtonGadget(#Btn,10,10,180,250,"Strg + LCLK Mouse")
AddKeyboardShortcut(#Wnd, #PB_Shortcut_Control |#PB_Shortcut_F, #ESC_Velindos)
; -------
;-REPEAT
Define EventID
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
;{ Event CloseWindow
End
;}
Case #PB_Event_Menu
;{ Event Menu
Select EventMenu()
Case #ESC_Velindos
End
EndSelect
Case #PB_Event_Gadget
If EventGadget() = #Btn And GetAsyncKeyState_(#VK_LCONTROL) & $8000
End
EndIf
;}
EndSelect
ForEver
; -------
Re: Strg + Button-Druck
Verfasst: 23.10.2020 13:30
von Velindos
Hallo,
Danke, Super Vorschlag!
Da ich öfters Callback für Button einsetze, habe ich versucht das Ding mit dem Callback, funzt aber nicht!
Code: Alles auswählen
; Strg + Button-Druck
Enumeration
#Wnd
#ESC_Velindos
EndEnumeration
Global Btn
Global *gOldEditProc_297
Procedure DplClk_Btn(hWnd, uMsg, wParam, lParam)
; *gOldEditProc_297 = SetWindowLongPtr_(GadgetID(Btn), #GWL_WNDPROC, @DplClk_Btn())
Protected Result
Select uMsg
Case #WM_LBUTTONDOWN
Debug "LEFT!"
Case #WM_RBUTTONDOWN
Debug "RIHT!"
Result = 0
Default
Result = CallWindowProc_(*gOldEditProc_297, hWnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn Result
EndProcedure
; -------
OpenWindow(#Wnd, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
Btn = ButtonGadget(#PB_Any,10,10,180,250,"Strg + LCLK Mouse")
*gOldEditProc_297 = SetWindowLongPtr_(GadgetID(Btn), #GWL_WNDPROC, @DplClk_Btn())
AddKeyboardShortcut(#Wnd, #PB_Shortcut_Control |#PB_Shortcut_F, #ESC_Velindos)
; -------
;-REPEAT
Define EventID
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
;{ Event CloseWindow
End
;}
Case #PB_Event_Menu
;{ Event Menu
Select EventMenu()
Case #ESC_Velindos
End
EndSelect
Case #PB_Event_Gadget
If EventGadget() = Btn And GetAsyncKeyState_(#VK_LCONTROL) & $8000
End
EndIf
;}
EndSelect
ForEver
; -------
Muss ich da noch was Berücksichtigen?
Gruss ... Velindos!
Re: Strg + Button-Druck
Verfasst: 23.10.2020 14:58
von HeX0R
Preisfrage: Was passiert, wenn man eine 0 aus diesem CallBack zurückgibt?
Re: Strg + Button-Druck
Verfasst: 23.10.2020 16:42
von Velindos
Hallo HeX0R,
Danke für deinen Tip! Zu deiner Frage, keine Ahnung!
Hab die Sache jetzt so eingearbeitet und das Funzt.
Code: Alles auswählen
; Strg + Button-Druck
Enumeration
#Wnd
#ESC_Velindos
EndEnumeration
Global Btn
Global *gOldEditProc_297
Procedure DplClk_Btn(hWnd, uMsg, wParam, lParam)
; *gOldEditProc_297 = SetWindowLongPtr_(GadgetID(Btn), #GWL_WNDPROC, @DplClk_Btn())
Protected Result
Select uMsg
Case #WM_LBUTTONDOWN
If GetAsyncKeyState_(#VK_LCONTROL) & $8000
Debug "STRG + LINKSKLICK auf BUTTON!"
; End
Else
Debug "LINKSKLICK auf BUTTON!"
EndIf
Case #WM_RBUTTONDOWN
Debug "RECHTSKLICK auf BUTTON!"
Result = 0
Default
Result = CallWindowProc_(*gOldEditProc_297, hWnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn Result
EndProcedure
; -------
OpenWindow(#Wnd, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
Btn = ButtonGadget(#PB_Any,10,10,180,250,"Strg + LCLK Mouse")
*gOldEditProc_297 = SetWindowLongPtr_(GadgetID(Btn), #GWL_WNDPROC, @DplClk_Btn())
AddKeyboardShortcut(#Wnd, #PB_Shortcut_Control |#PB_Shortcut_F, #ESC_Velindos)
; -------
;-REPEAT
Define EventID
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
;{ Event CloseWindow
End
;}
Case #PB_Event_Menu
;{ Event Menu
Select EventMenu()
Case #ESC_Velindos
End
EndSelect
Case #PB_Event_Gadget
; If EventGadget() = Btn And GetAsyncKeyState_(#VK_LCONTROL) & $8000
; End
; EndIf
;}
EndSelect
ForEver
; -------
Wenns bessere Lösungen gibt, dann lasst es mich Wissen!
Gruss ... Velindos!