Page 1 sur 1

Désactiver la croix de fermeture de fenêtre

Publié : ven. 11/févr./2005 15:01
par Anonyme2
J'ai pas trop envie de chercher (oui ça arrive :roll: ) alors si vous savez comment désactiver la croix de fermeture d'une fenêtre (en haut à droite) merci de me mettre un exemple :D

Publié : ven. 11/févr./2005 15:28
par Le Soldat Inconnu
désactiver ??
ne pas l'afficher tu veux dire. ou mettre en gris le bouton ?

Publié : ven. 11/févr./2005 16:00
par Anonyme2
Mettre en gris

Publié : ven. 11/févr./2005 16:32
par nico
Si je me souviens bien, il faut désactiver le menu correspondant dans le système menu.

Publié : ven. 11/févr./2005 16:51
par nico

Code : Tout sélectionner

    hSysMenu = GetSystemMenu_(WindowID(0), #False)
    nb = GetMenuItemCount_(hSysMenu)
    ;Tu peux utiliser #MF_DISABLED OU #MF_REMOVE
    RemoveMenu_(hSysMenu, nb - 1, #MF_REMOVE | #MF_BYPOSITION)
    RemoveMenu_(hSysMenu, nb - 2, #MF_REMOVE | #MF_BYPOSITION)

Publié : ven. 11/févr./2005 17:07
par Anonyme2
Merci Nico,

je vais tester tout de suite :D

Publié : ven. 11/févr./2005 17:31
par nico
D'une manière générale, on fera ça:

Code : Tout sélectionner

    hSysMenu = GetSystemMenu_(WindowID(0), #False)
    RemoveMenu_(hSysMenu, #SC_CLOSE,#MF_BYCOMMAND)

Publié : ven. 11/févr./2005 18:16
par Anonyme2
Après essai, remove supprime l'élément du menu et désactive bien la croix ou les autres boutons en fonction de la position, mais je ne suis pas parvenu à réctiver la croix avec removemenu (normal puisque l'élément a été supprimé).

J'avais besoin de désactiver la croix puis de la réctiver et j'ai fait comme ceci et ça marche impect.

Code : Tout sélectionner

      hSysMenu = GetSystemMenu_(WindowID(), #False)
      Nb = GetMenuItemCount_(hSysMenu)
            EnableMenuItem_(hSysMenu, Nb - 1, #MF_DISABLED | #MF_BYPOSITION)
            DrawMenuBar_(WindowID())
  

et pour réactiver

Code : Tout sélectionner

                        EnableMenuItem_(hSysMenu, Nb - 1, #MF_ENABLED | #MF_BYPOSITION)
                        DrawMenuBar_(WindowID())

Publié : ven. 11/févr./2005 19:01
par KarLKoX

Code : Tout sélectionner

Procedure SetMenuQuitState(OnOff.l)
        
        hSysMenu = GetSystemMenu_(WindowID(), #False)
        Nb = GetMenuItemCount_(hSysMenu)
        EnableMenuItem_(hSysMenu, Nb - 1, OnOff | #MF_BYPOSITION)
        DrawMenuBar_(WindowID()) 
        
EndProcedure

  
  OnOff = 0
  If OpenWindow(0, 200, 200, 200, 100, #PB_Window_SystemMenu, "Menu Example") And CreateGadgetList(WindowID(0)) 
    If CreateMenu(0, WindowID())    
      MenuTitle("Project") 
        MenuItem(1, "Open"   +Chr(9)+"Ctrl+O") 
        MenuItem(2, "Save"   +Chr(9)+"Ctrl+S") 
        MenuItem(3, "Save as"+Chr(9)+"Ctrl+A") 
        MenuItem(4, "Close"  +Chr(9)+"Ctrl+C") 
        
        ButtonGadget(5, 10, 10, 180, 20, "Standard Button") 
        
                            
    EndIf 
    Repeat 
      EventID = WaitWindowEvent()
      If EventID = #PB_Event_CloseWindow 
        Quit = 1
      ElseIf EventID = #PB_EventGadget
        If EventGadgetID() = 5
          If OnOff
            SetMenuQuitState(#false)
            OnOff = #false
          Else
            SetMenuQuitState(#True)
            OnOff = #true
          EndIf
        EndIf
      EndIf
    
    Until Quit
  EndIf