#PB_EventType_RightClick im Editorgadget nich vorhanden???

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

#PB_EventType_RightClick im Editorgadget nich vorhanden???

Beitrag von nicolaus »

habe ich was verpast oder gibts #PB_EventType_RightClick nich im editorgadget?
wie kann ich den den event für nen rechtsklick bekommen?
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Code: Alles auswählen

repeat
eventid.l=waitwindowevent ()
   select eventid.l
      case #wm_rbuttondown
         Debug "Rechts gedrückt"
   endselect
until eventid.l=#pb_event_closewindow
end 
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

das is mir schon klar doch geht das so nich denn versuch das mal so:

Code: Alles auswählen

repeat 
eventid.l=waitwindowevent () 
   if eventid = #PB_Event_Gadget
    GadgetID = EventGadgetID()
    if GadgetID = #editorgadget
      if eventid = #wm_rbuttondown 
         Debug "Rechts gedrückt" 
      endif
    endif
  endif
until eventid =#pb_event_closewindow 
end
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Hab ich auch nicht behauptet !

Code: Alles auswählen

repeat
eventid.l=waitwindowevent ()
  Select EventID.l
      case #wm_lbuttondown
          if WindowMouseX()=>#gadget_x and WindowMouseY()=>#gadget_Y and WindowMouseX()=<#gadget_width and windowMouseY()=#gadget_height
             debug "rechts geklickt"
         Endif 
  EndSelect 
until eventid =#pb_event_closewindow
end
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: #PB_EventType_RightClick im Editorgadget nich vorhanden?

Beitrag von Danilo »

nicolaus hat geschrieben:wie kann ich den den event für nen rechtsklick bekommen?
Das Grundprinzip:

Code: Alles auswählen

;
; by Danilo, 01.11.2004 - german forum
;
;   - 02.06.2005, by Danilo
;     changed DisplayPopupMenu(1,  wParam   ,lParam&$FFFF,(lParam>>16)&$FFFF)
;     to      DisplayPopupMenu(1,WindowID(0),lParam&$FFFF,(lParam>>16)&$FFFF)
;
If CreatePopupMenu(0)
  MenuItem(1, "Cut")
  MenuItem(2, "Copy")
  MenuItem(3, "Paste")
  MenuItem(4, "Quit")
Else
  End ; Error
EndIf

If CreatePopupMenu(1)
  MenuItem(1, "ButtonMenu 1")
  MenuItem(2, "ButtonMenu 2")
Else
  End ; Error
EndIf


Procedure WndProc(hWnd,Msg,wParam,lParam)
  Select Msg
    Case #WM_CONTEXTMENU
      ; Diese Message kommt automatisch von Windows
      ; bei Right-Click aufs Fenster und bei Shift+F10
      ; 
      ; Bei Shift + F10 sind die MausKoordinaten in lParam
      ; beide -1, weshalb wir dafr die Koordinaten des
      ; Fensters (wParam) nehmen:
      If lParam = $FFFFFFFF
        GetWindowRect_(wParam,r.RECT)
        lParam = (r\top<<16)|(r\left&$FFFF)
      EndIf
      ;
      ; Display PopUp Menu:
      If wParam = GadgetID(2)
        ; PopUp Menu fr den Button 2
        DisplayPopupMenu(1,WindowID(0),lParam&$FFFF,(lParam>>16)&$FFFF)
      Else
        ; PopUp Menu fr den Rest
        DisplayPopupMenu(0,WindowID(0),lParam&$FFFF,(lParam>>16)&$FFFF)
      EndIf
      ProcedureReturn 0
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure


If OpenWindow(0,0,0,200,200,#PB_Window_Titlebar|#PB_Window_ScreenCentered,"Press SHIFT+F10")
  CreateGadgetList(WindowID())
  ButtonGadget(1,10,10,100,20,"PopUp Main Menu")
  ButtonGadget(2,10,35,100,20,"Right Click Me!")
  SetWindowCallback(@WndProc())

  Repeat
    Select WaitWindowEvent()
      Case #PB_EventGadget
        Select EventGadgetID()
          Case 1
            GetCursorPos_(p.POINT)
            SendMessage_(WindowID(0),#WM_CONTEXTMENU,WindowID(0),(p\y<<16)|(p\x&$FFFF))
        EndSelect
      Case #PB_EventMenu
        Select EventMenuID()
          Case 4 ; Quit
            Break
        EndSelect
    EndSelect
  ForEver
Else
  End ; Error
EndIf
...funktioniert auch mit dem EditorGadget:

Code: Alles auswählen

If CreatePopupMenu(0)
  MenuItem(100, "Cut")
  MenuItem(101, "Copy")
  MenuItem(102, "Paste")
Else
  End ; Error
EndIf

Procedure WndProc(hWnd,Msg,wParam,lParam)
  Select Msg
    Case #WM_CONTEXTMENU
      ; Diese Message kommt automatisch von Windows
      ; bei Right-Click aufs Fenster und bei Shift+F10
      ; 
      ; Bei Shift + F10 sind die MausKoordinaten in lParam
      ; beide -1, weshalb wir dafr die Koordinaten des
      ; Fensters (wParam) nehmen:
      If lParam = $FFFFFFFF
        GetWindowRect_(wParam,r.RECT)
        lParam = (r\top<<16)|(r\left&$FFFF)
      EndIf
      ;
      ; Display PopUp Menu:
      If wParam = GadgetID(1)
        ; PopUp Menu fr EditorGadget
        DisplayPopupMenu(0,WindowID(0),lParam&$FFFF,(lParam>>16)&$FFFF)
      EndIf
      ProcedureReturn 0
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure


If OpenWindow(0,0,0,200,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Edit")
  CreateGadgetList(WindowID())
  EditorGadget(1,5,5,190,190)
  SetWindowCallback(@WndProc())

  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_EventMenu
        Select EventMenuID()
          Case 100 : Debug "Cut"
          Case 101 : Debug "Copy"
          Case 102 : Debug "Paste"
        EndSelect
    EndSelect
  ForEver
Else
  End ; Error
EndIf
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

@Danilo
danke dir erst mal.
habs jetzt selber auch hin bekommen wie du an folgendem code siehst:

Code: Alles auswählen

Global MousePos.POINT
Global rightmouse
rightmouse = #VK_RBUTTON+GetSystemMetrics_(#SM_SWAPBUTTON)

hwnd = OpenWindow(0,0,0,300,300,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Editorgadget rechte Maustaste Test")
CreateGadgetList(WindowID())
EditorGadget(0,5,5,290,290)
For I = 0 To 20
  AddGadgetItem(0,I,"testen der rechten Maustaste")
Next
If CreatePopupMenu(0)
  MenuItem(1,"Clear all")
EndIf

Repeat
  Event = WaitWindowEvent()
  GetCursorPos_(MousePos) 
  If getasynckeystate_(rightmouse)
    If EventWindowID() = 0 And WindowFromPoint_(MousePos\x,MousePos\y) = GadgetID(0)
      DisplayPopupMenu(0,WindowID())
    EndIf
  EndIf
  If Event = #PB_Event_Menu
    menuid = EventMenuID()
    If menuid = 1
      ClearGadgetItemList(0)
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow
gruß nico
Antworten