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!