Page 1 sur 1

[résolu] detecter clic droit sur barre de titre d'1 fenetre

Publié : mer. 14/mai/2008 17:53
par Patrick88
salut

je ne parviens pas a detecter le clic droit sur la barre de titre d'une fenetre, si ça marchait, j'ouvrirait un popup menu personnalisé, hors il ne m'ouvre que le popup menu system...

Code : Tout sélectionner

OpenWindow(0,0,0,200,200,"essai popup menu",#PB_Window_SystemMenu)
CreatePopupMenu(0)
MenuItem(0,"Option")
Repeat
  event=WaitWindowEvent()
  If event = #WM_RBUTTONDOWN And WindowMouseY(0) < 0
    DisplayPopupMenu(0,WindowID(0))
  EndIf
Until event = #PB_Event_CloseWindow
End
une idée ?

pat

Publié : jeu. 15/mai/2008 9:29
par Ar-S
Salut,
C'est normal, seules les dimensions de ta fenetre sont prisent en compte. La barre de titre non. A mon avis il faudrait que tu récupères la dimension X et Y de ton ecran, que tu places ta fenetre en fonction de...
Ex : si Xecran=1024 et Yecran=768 alors Xtafenetre =800 et Ytafenetre=500

ensuite tu pourrais faire un

Code : Tout sélectionner

 If event = #PB_MouseButton_Right And WindowMouseY(0) < Ytafenetre  
Je n'ai pas le temps d'essayer un code complet mais c'est une idée je pense.

Après y'a surement des API pour ça mais là ça me dépasse ;)

Publié : jeu. 15/mai/2008 9:53
par gnozal
If faut utiliser #WM_NCRBUTTONDOWN au lieu de #WM_RBUTTONDOWN, car la barre de titre n'est pas dans la zone client [NC = non client (area)] de la fenêtre.

Code : Tout sélectionner

;
; Custom context menu on title bar
;
Enumeration
  #Window_0
EndEnumeration
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 448, 159, 315, 315, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    CreatePopupMenu(0) 
    MenuItem(0, "Option")
  EndIf
EndProcedure

Procedure MyWindowCallback(WindowID, message, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents
  ;
  Select message
    Case #WM_NCLBUTTONDOWN 
      If wParam = #HTCAPTION
        Debug "Click in title bar"
        Result = 0
      EndIf
    Case #WM_NCRBUTTONDOWN
      If wParam = #HTCAPTION Or wParam = #HTSYSMENU	
        Debug "RightClick in title bar or system menu button"
        DisplayPopupMenu(0, WindowID)
        Result = 0
      EndIf
  EndSelect
  ;
  ProcedureReturn Result
EndProcedure


OpenWindow_Window_0()

SetWindowCallback(@MyWindowCallback())

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver

Publié : jeu. 15/mai/2008 11:54
par Patrick88
nickel, merci, gnozal

pat

Publié : jeu. 15/mai/2008 15:08
par Ar-S
Ou ba me coucherai une fois de plus moins con ce soir ;)

Publié : jeu. 15/mai/2008 16:43
par Neosis
Ar-S a écrit :Ou ba me coucherai une fois de plus moins con ce soir ;)
Moi aussi je croie :)