J'arrive pas à avoir un menu contextuel

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

J'arrive pas à avoir un menu contextuel

Message par gansta93 »

Bonjour,

Je fais, pour m'amuser parce qu'il y en a plain des trucs comme ça, un petit editeur genre Notepad. Je veux donc, comme dans tout editeur, faire que dès qu'on fait un clique droit sur l'editorgadget en locurence dans mon cas, ça ouvre un menu contextuel. Mais là, ça ne marche pas.
Si quelqu'un pouvait m'aider svp.

Code : Tout sélectionner

Enumeration

#Fenetre
#Menu
#Contexte
#Menu2
#Editeur
#Nouveau
#Ouvrir
#Enregistrer
#Enregistrer_Sous
#Quitter
#Annuler
#Refaire
#Couper
#Copier
#Coller
#About
#TexteAbout
#LinkAbout
#ReTexteAbout
#OK

EndEnumeration

Global NomFichier.s,Titre.s
NomFichier.s="Sans Titre"
titre.s="Gansta93 Notepad"

Procedure EnregistrerSous()

Repeat
reg.s=SaveFileRequester("",NomFichier,"Fichier text(*.txt)|*.txt|Tous type de fichier(*.*)|*.*",0)
If reg
If FileSize(reg)>0
Select MessageRequester(Titre,"Le fichier "+reg+" existe déjà."+#crlf+"Voulez-vous le remplacer?"+#crlf+"Taille: "+Str(FileSize(reg))+".",#mb_yesno|#mb_IconExclamation|#mb_defbutton2)
Case #Idyes
If CreateFile(0,Reg)
WriteString(GetGadgetText(#Editeur))
CloseFile(0)
NomFichier=reg
sort=1
Else
MessageRequester("Erreur","Impossible d'écrire dans le fichier."+#crlf+"Vérifiez qu'e celui-ci n'est pas protègé en écriture, ou qu'il n'est pas utilisé actuellemant.",#mb_ok|#mb_iconStop)
EndIf
EndSelect
Else
If CreateFile(0,Reg)
WriteString(GetGadgetText(#Editeur))
CloseFile(0)
NomFichier=reg
sort=1
Else
MessageRequester("Erreur","Impossible d'écrire dans le fichier."+#crlf+"Vérifiez qu'e celui-ci n'est pas protègé en écriture, ou qu'il n'est pas utilisé actuellemant.",#mb_ok|#mb_iconStop)
EndIf
EndIf
Else
sort=1
EndIf

Until sort=1

EndProcedure

If ExamineDesktops()
Largeure=DesktopWidth(0)-100
Hauteure=DesktopHeight(0)-100
If OpenWindow(#Fenetre,0,0,Largeure,Hauteure,#pb_window_minimizegadget|#pb_window_maximizegadget|#pb_window_sizegadget|#pb_window_titlebar|#pb_window_systemmenu|#pb_window_screencentered,NomFichier+" - "+titre) And CreateMenu(#Menu,WindowID(#Fenetre)) And CreateStatusBar(0,WindowID(#Fenetre)) And CreateGadgetList(WindowID(#Fenetre))
MenuTitle("&Fichier")
MenuItem(#Nouveau,"&Nouveau"+#tabe+"Ctrl+N")
AddKeyboardShortcut(0,#pb_shortcut_control|#pb_shortcut_n,#Nouveau)
MenuItem(#Ouvrir,"&Ouvrir..."+#Tabe+"Ctrl+O")
AddKeyboardShortcut(0,#pb_shortcut_control|#pb_shortcut_o,#Ouvrir)
MenuItem(#Enregistrer,"&Enregistrer"+#Tabe+"Ctrl+S")
AddKeyboardShortcut(#Fenetre,#PB_Shortcut_Control|#PB_Shortcut_S,#Enregistrer)
MenuItem(#Enregistrer_Sous,"En&registrer Sous..."+#Tabe+"F12")
AddKeyboardShortcut(#Fenetre,#PB_Shortcut_F12,#Enregistrer_Sous)
MenuBar()
MenuItem(#Quitter,"&Quitter"+#Tabe+"Alt+F4")
MenuTitle("&Edition")
MenuItem(#Annuler,"&Annuler"+#Tabe+"Ctrl+Z")
MenuItem(#Refaire,"&Refaire"+#Tabe+"Ctrl+Y")
MenuBar()
MenuItem(#Couper,"Co&uper"+#Tabe+"Ctrl+X")
MenuItem(#Copier,"Co&pier"+#tabe+"Ctrl+C")
MenuItem(#Coller,"Col&ler"+#Tabe+"Ctrl+V")
MenuTitle("&?")
MenuItem(#About,"à &Propos de...")
If CreatePopupMenu(#Contexte)
MenuItem(#Annuler,"&Annuler"+#Tabe+"Ctrl+Z")
MenuItem(#Refaire,"&Refaire"+#Tabe+"Ctrl+Y")
MenuBar()
MenuItem(#Couper,"Co&uper"+#Tabe+"Ctrl+X")
MenuItem(#Copier,"Co&pier"+#tabe+"Ctrl+C")
MenuItem(#Coller,"Col&ler"+#Tabe+"Ctrl+V")
AddKeyboardShortcut(#Fenetre,#PB_Shortcut_Apps,#Contexte)
AddKeyboardShortcut(#Fenetre,#PB_Shortcut_Shift|#pb_Shortcut_F10,#Contexte)
EndIf
StatusBarText(0,0,Titre+" prait")
Edit=EditorGadget(#Editeur,0,0,Largeure,hauteure-30)
Repeat
If StringField(GetWindowTitle(#Fenetre),1," - ")<>NomFichier
SetWindowTitle(#Fenetre,NomFichier+" - "+Titre)
EndIf
ActivateGadget(#Editeur)
Select WaitWindowEvent()
Case #pb_eventclosewindow
quit=1
Case #pb_EventGadget
Select EventType()
Case #PB_EventType_RightClick
If EventGadgetID()=#Editeur
DisplayPopupMenu(#Contexte,WindowID(#Fenetre))
EndIf
EndSelect
Case #PB_EventMenu
Select EventMenuID()
Case #Nouveau
MessageRequester(Titre,"Désolé, mais cette fonction n'est pas installée.",#mb_ok|#mb_iconexclamation)
Case #Ouvrir
MessageRequester(Titre,"Désolé, mais cette fonction n'est pas installée.",#mb_ok|#mb_iconexclamation)
Case #Enregistrer
If FileSize(NomFichier)>0
If CreateFile(0,NomFichier)
WriteString(GetGadgetText(#Editeur))
CloseFile(0)
Else
MessageRequester("Erreur","Impossible d'écrire dans le fichier."+#crlf+"Vérifiez qu'e celui-ci n'est pas protègé en écriture, ou qu'il n'est pas utilisé actuellemant.",#mb_ok|#mb_iconStop)
EndIf
ElseIf NomFichier="Sans Titre"
EnregistrerSous()
Else
EnregistrerSous()
EndIf
Case #Enregistrer_Sous
EnregistrerSous()
Case #Quitter
quit=1
Case #Annuler
  SendMessage_(Edit, #EM_UNDO, 0, 0)
Case #Refaire
  SendMessage_(Edit, #EM_REDO, 0, 0)
Case #Couper
  SendMessage_(Edit, #WM_CUT, 0, 0)
Case #Copier
  SendMessage_(Edit, #WM_COPY, 0, 0)
Case #Coller
    SendMessage_(Edit, #WM_PASTE, 0, 0)
Case #About
Largeure2=Largeure-100
Hauteure2=Hauteure-100
If OpenWindow(#About,0,0,Largeure2,Hauteure2,#PB_Window_SystemMenu|#pb_Window_titlebar|#pb_window_windowcentered,"à Propos de "+Titre,WindowID(#Fenetre)) And CreateGadgetList(WindowID(#About))
UseWindow(#About)
TextGadget(#TexteAbout,0,0,Largeure2/2,20,"Fait en PureBasic en 2004 par Gansta93. Pour aller sur Le Monde de Gansta93,")
HyperLinkGadget(#LinkAbout,largeure2/2+5,0,largeure2/2-5,20,"Cliquez ici.",RGB(0,0,255))
TextGadget(#ReTexteAbout,0,25,Largeure2,20,"Merci d'utiliser "+Titre+"!",#PB_Text_Center)
ButtonGadget(#OK,Largeure2/2,55,20,20,"OK",#PB_Text_Center)
RemoveKeyboardShortcut(#About,#pb_shortcut_all)
AddKeyboardShortcut(#About,#PB_shortcut_escape,#OK)
AddKeyboardShortcut(#About,#PB_Shortcut_Return,#OK)
Repeat
ActivateGadget(#OK)
Select WaitWindowEvent()
Case #pb_eventclosewindow
close=1
Case #pb_eventmenu
Select EventMenuID()
Case #OK
close=1
EndSelect
Case #pb_eventgadget
Select EventGadgetID()
Case #LinkAbout
RunProgram("http://www.gansta93.com")
Case #OK
close=1
EndSelect
EndSelect
Delay(20)
Until close=1
FreeGadget(#texteAbout)
FreeGadget(#linkAbout)
FreeGadget(#ReTexteAbout)
FreeGadget(#OK)
CloseGadgetList()
RemoveKeyboardShortcut(#About,#PB_Shortcut_All)
CloseWindow(#About)
UseWindow(#Fenetre)
ActivateWindow()
close=0
Else
ShellAbout_(WindowID(#Fenetre),Titre,"Copyright "+#Copyright+" 2004 par Gansta93. Tous droits réservés.",0)
EndIf
Case #Contexte
DisplayPopupMenu(#Contexte,WindowID(#Fenetre))
EndSelect
EndSelect
Delay(20)
Until quit=1
Else
MessageRequester("Erreur","Erreur lors de la création de la fenêtre.",#mb_ok|#mb_iconstop)
EndIf
Else
MessageRequester("Erreur","Impossible d'obtenire les résolutions d'écrans.",#mb_ok|#mb_iconstop)
EndIf
End
Merci d'avance.
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Voilà, c'est expliqué dedans, et utilise un peu d'indentation !!!! Car quand tout est sur la même ligne, peut-être que toi tu comprends mais c'est pas le cas de tout le monde :wink:

Code : Tout sélectionner

Enumeration 

#Fenetre 
#Menu 
#Contexte 
#Menu2 
#Editeur 
#Nouveau 
#Ouvrir 
#Enregistrer 
#Enregistrer_Sous 
#Quitter 
#Annuler 
#Refaire 
#Couper 
#Copier 
#Coller 
#About 
#TexteAbout 
#LinkAbout 
#ReTexteAbout 
#OK 

EndEnumeration 

#crlf.s = Chr(13) + Chr(10)
#Tabe = "  "

Global NomFichier.s,Titre.s 
NomFichier.s="Sans Titre" 
titre.s="Gansta93 Notepad" 

Procedure EnregistrerSous() 

  Repeat 
    reg.s=SaveFileRequester("",NomFichier,"Fichier text(*.txt)|*.txt|Tous type de fichier(*.*)|*.*",0) 
    If reg 
      If FileSize(reg)>0 
        Select MessageRequester(Titre,"Le fichier "+reg+" existe déjà."+#crlf+"Voulez-vous le remplacer?"+Chr(13) + Chr(10)+"Taille: "+Str(FileSize(reg))+".",#mb_yesno|#mb_IconExclamation|#mb_defbutton2) 
          Case #Idyes 
            If CreateFile(0,Reg) 
              WriteString(GetGadgetText(#Editeur)) 
              CloseFile(0) 
              NomFichier=reg 
              sort=1 
            Else 
              MessageRequester("Erreur","Impossible d'écrire dans le fichier."+#crlf+"Vérifiez qu'e celui-ci n'est pas protègé en écriture, ou qu'il n'est pas utilisé actuellemant.",#mb_ok|#mb_iconStop) 
            EndIf 
        EndSelect 
      Else 
        If CreateFile(0,Reg) 
          WriteString(GetGadgetText(#Editeur)) 
          CloseFile(0) 
          NomFichier=reg 
          sort=1 
        Else 
          MessageRequester("Erreur","Impossible d'écrire dans le fichier."+#crlf+"Vérifiez qu'e celui-ci n'est pas protègé en écriture, ou qu'il n'est pas utilisé actuellemant.",#mb_ok|#mb_iconStop) 
        EndIf 
      EndIf 
    Else 
      sort=1 
    EndIf 

  Until sort=1 

EndProcedure 

If ExamineDesktops() 
  Largeure=DesktopWidth(0)-100 
  Hauteure=DesktopHeight(0)-100 
  If OpenWindow(#Fenetre,0,0,Largeure,Hauteure,#pb_window_minimizegadget|#pb_window_maximizegadget|#pb_window_sizegadget|#pb_window_titlebar|#pb_window_systemmenu|#pb_window_screencentered,NomFichier+" - "+titre) And CreateMenu(#Menu,WindowID(#Fenetre)) And CreateStatusBar(0,WindowID(#Fenetre)) And CreateGadgetList(WindowID(#Fenetre)) 
    MenuTitle("&Fichier") 
    MenuItem(#Nouveau,"&Nouveau"+#tabe+"Ctrl+N") 
    AddKeyboardShortcut(0,#pb_shortcut_control|#pb_shortcut_n,#Nouveau) 
    MenuItem(#Ouvrir,"&Ouvrir..."+#Tabe+"Ctrl+O") 
    AddKeyboardShortcut(0,#pb_shortcut_control|#pb_shortcut_o,#Ouvrir) 
    MenuItem(#Enregistrer,"&Enregistrer"+#Tabe+"Ctrl+S") 
    AddKeyboardShortcut(#Fenetre,#PB_Shortcut_Control|#PB_Shortcut_S,#Enregistrer) 
    MenuItem(#Enregistrer_Sous,"En&registrer Sous..."+#Tabe+"F12") 
    AddKeyboardShortcut(#Fenetre,#PB_Shortcut_F12,#Enregistrer_Sous) 
    MenuBar() 
    MenuItem(#Quitter,"&Quitter"+#Tabe+"Alt+F4") 
    MenuTitle("&Edition") 
    MenuItem(#Annuler,"&Annuler"+#Tabe+"Ctrl+Z") 
    MenuItem(#Refaire,"&Refaire"+#Tabe+"Ctrl+Y") 
    MenuBar() 
    MenuItem(#Couper,"Co&uper"+#Tabe+"Ctrl+X") 
    MenuItem(#Copier,"Co&pier"+#tabe+"Ctrl+C") 
    MenuItem(#Coller,"Col&ler"+#Tabe+"Ctrl+V") 
    MenuTitle("&?") 
    MenuItem(#About,"à &Propos de...") 
    If CreatePopupMenu(#Contexte) 
      MenuItem(#Annuler,"&Annuler"+#Tabe+"Ctrl+Z") 
      MenuItem(#Refaire,"&Refaire"+#Tabe+"Ctrl+Y") 
      MenuBar() 
      MenuItem(#Couper,"Co&uper"+#Tabe+"Ctrl+X") 
      MenuItem(#Copier,"Co&pier"+#tabe+"Ctrl+C") 
      MenuItem(#Coller,"Col&ler"+#Tabe+"Ctrl+V") 
      AddKeyboardShortcut(#Fenetre,#PB_Shortcut_Apps,#Contexte) 
      AddKeyboardShortcut(#Fenetre,#PB_Shortcut_Shift|#pb_Shortcut_F10,#Contexte) 
    EndIf 
    StatusBarText(0,0,Titre+" prait") 
    Edit=EditorGadget(#Editeur,0,0,Largeure,hauteure-30) 
    Repeat 
      If StringField(GetWindowTitle(#Fenetre),1," - ")<>NomFichier 
        SetWindowTitle(#Fenetre,NomFichier+" - "+Titre) 
      EndIf 
      ActivateGadget(#Editeur) 
      Select WaitWindowEvent() 
        Case #pb_eventclosewindow 
          quit=1 
;- ici         Case #pb_EventGadget ; Ce n'est mais ça
;           Select EventType() 
;             Case #PB_EventType_RightClick 
;             If EventGadgetID()=#Editeur 
;               DisplayPopupMenu(#Contexte,WindowID(#Fenetre)) 
;             EndIf 
;           EndSelect 
        
        Case #WM_RButtonDown ; Mais ça : Lorsque l'on fait un click droit sur une fenêtre, c'est intercepté ici
          DisplayPopupMenu(#Contexte,WindowID(#Fenetre))

        Case #PB_EventMenu 
          Select EventMenuID() 
            Case #Nouveau 
              MessageRequester(Titre,"Désolé, mais cette fonction n'est pas installée.",#mb_ok|#mb_iconexclamation) 
            Case #Ouvrir 
              MessageRequester(Titre,"Désolé, mais cette fonction n'est pas installée.",#mb_ok|#mb_iconexclamation) 
            Case #Enregistrer 
              If FileSize(NomFichier)>0 
                If CreateFile(0,NomFichier) 
                  WriteString(GetGadgetText(#Editeur)) 
                  CloseFile(0) 
                Else 
                  MessageRequester("Erreur","Impossible d'écrire dans le fichier."+#crlf+"Vérifiez qu'e celui-ci n'est pas protègé en écriture, ou qu'il n'est pas utilisé actuellemant.",#mb_ok|#mb_iconStop) 
                EndIf 
              ElseIf NomFichier="Sans Titre" 
                EnregistrerSous() 
              Else 
                EnregistrerSous() 
              EndIf 
            Case #Enregistrer_Sous 
              EnregistrerSous() 
            Case #Quitter 
              quit=1 
            Case #Annuler 
              SendMessage_(Edit, #EM_UNDO, 0, 0) 
            Case #Refaire 
              SendMessage_(Edit, #EM_REDO, 0, 0) 
            Case #Couper 
              SendMessage_(Edit, #WM_CUT, 0, 0) 
            Case #Copier 
              SendMessage_(Edit, #WM_COPY, 0, 0) 
            Case #Coller 
                SendMessage_(Edit, #WM_PASTE, 0, 0) 
            Case #About 
              Largeure2=Largeure-100 
              Hauteure2=Hauteure-100 
              If OpenWindow(#About,0,0,Largeure2,Hauteure2,#PB_Window_SystemMenu|#pb_Window_titlebar|#pb_window_windowcentered,"à Propos de "+Titre,WindowID(#Fenetre)) And CreateGadgetList(WindowID(#About)) 
                UseWindow(#About) 
                TextGadget(#TexteAbout,0,0,Largeure2/2,20,"Fait en PureBasic en 2004 par Gansta93. Pour aller sur Le Monde de Gansta93,") 
                HyperLinkGadget(#LinkAbout,largeure2/2+5,0,largeure2/2-5,20,"Cliquez ici.",RGB(0,0,255)) 
                TextGadget(#ReTexteAbout,0,25,Largeure2,20,"Merci d'utiliser "+Titre+"!",#PB_Text_Center) 
                ButtonGadget(#OK,Largeure2/2,55,20,20,"OK",#PB_Text_Center) 
                RemoveKeyboardShortcut(#About,#pb_shortcut_all) 
                AddKeyboardShortcut(#About,#PB_shortcut_escape,#OK) 
                AddKeyboardShortcut(#About,#PB_Shortcut_Return,#OK) 
                Repeat 
                  ActivateGadget(#OK) 
                  Select WaitWindowEvent() 
                    Case #pb_eventclosewindow 
                      close=1 
                    Case #pb_eventmenu 
                      Select EventMenuID() 
                        Case #OK 
                          close=1 
                      EndSelect 
                    Case #pb_eventgadget 
                      Select EventGadgetID() 
                        Case #LinkAbout 
                          RunProgram("http://www.gansta93.com") 
                        Case #OK 
                          close=1 
                      EndSelect 
                  EndSelect 
                  Delay(20) 
                Until close=1 
                FreeGadget(#texteAbout) 
                FreeGadget(#linkAbout) 
                FreeGadget(#ReTexteAbout) 
                FreeGadget(#OK) 
                CloseGadgetList() 
                RemoveKeyboardShortcut(#About,#PB_Shortcut_All) 
                CloseWindow(#About) 
                UseWindow(#Fenetre) 
                ActivateWindow() 
                close=0 
              Else 
                ShellAbout_(WindowID(#Fenetre),Titre,"Copyright "+" 2004 par Gansta93. Tous droits réservés.",0) 
              EndIf 
            Case #Contexte 
              DisplayPopupMenu(#Contexte,WindowID(#Fenetre)) 
        EndSelect 
      EndSelect 
      Delay(20) 
    Until quit=1 
  Else 
    MessageRequester("Erreur","Erreur lors de la création de la fenêtre.",#mb_ok|#mb_iconstop) 
  EndIf 
Else 
  MessageRequester("Erreur","Impossible d'obtenire les résolutions d'écrans.",#mb_ok|#mb_iconstop) 
EndIf 
End 
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Merci bcp... je vais modifier ça.
En ce qui concerne les indentations, oui j'ai encore oublié... moi j'comprand mais bon c vrai que moi ben... la présentation ne change rien mais bon les prochains codes postés le seront :-).
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Tu devrais penser à redimensionner ta statusbar!
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

nico a écrit :Tu devrais penser à redimensionner ta statusbar!
Arf oui... compliqué ça faut que j'y réfléchisse... merci.
Répondre