Strg + Button-Druck

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Strg + Button-Druck

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Strg + Button-Druck

Beitrag von HeX0R »

#PB_Shortcut_Print ?
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Strg + Button-Druck

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Strg + Button-Druck

Beitrag 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
; -------
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Strg + Button-Druck

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Strg + Button-Druck

Beitrag von HeX0R »

Preisfrage: Was passiert, wenn man eine 0 aus diesem CallBack zurückgibt?
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Strg + Button-Druck

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten