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