Page 1 sur 1

[Résolu] Au secours, je me noye dans mon programme

Publié : lun. 09/nov./2015 19:20
par Micoute
Bonsoir à tous,
j'ai voulu me lancer dans un générateur de menu, mais je suis un peu à la traine et je dirais même que je rame carrément !

Si vous pouviez m'aider, je ne vous en remercierai jamais assez.

Code : Tout sélectionner

;Générateur de menu
Enumeration Fenetres
  #Fenetre_Menu
EndEnumeration

Enumeration Gadgets
  #Txt_Test
  #Edt
  #Txt_Texte
  #Btn_Titre
  #Txt_Icone
  #Txt_Enum
  #Btn_Niv_1
  #Btn_Niv_2
  #Btn_Niv_3
  #Btn_Niv_4
  #Str_Element_Menu
  #Str_Icone
  #Str_Enum
  #Btn_Separateur
  #Btn_Remplacer
  #Btn_Inserer
  #Btn_Ajouter
  #Btn_Vider
  #Btn_Supprimer
  #Btn_Icone_plus
  #Btn_Valider_Element_Menu
  #Btn_Icone_Moins
  #Btn_Monter_Menu
  #Btn_Descendre_Menu
  #Txt_Raccourci
  #Cmb_Raccourcis
  #Chk_Alt
  #Chk_Ctrl
  #Chk_Shift
  #Btn_Annuler
  #Btn_Ok
EndEnumeration

Enumeration Polices
  #Police
EndEnumeration  

Global Evenement, NewList ElementsMenu.s()

LoadFont(#Police, "FontAwesome", 10)


; Fermeture de la fenêtre principale et fin du programme
Procedure Fermer_Fenetre_principale()
  CloseWindow(#Fenetre_Menu)
  End
EndProcedure

Procedure Separateur()
  AddElement(ElementsMenu())
  ElementsMenu() = "MenuBar"
  SetGadgetText(#Edt, GetGadgetText(#Str_Element_Menu))
EndProcedure

Procedure Remplacer()
EndProcedure

Procedure Inserer()
EndProcedure

Procedure Ajouter()
EndProcedure

Procedure Vider()
EndProcedure

Procedure Supprimer()
EndProcedure

Procedure Icone_plus()
EndProcedure

Procedure Icone_moins()
EndProcedure

Procedure Valider_Element_Menu() ;Valider l'élément du menu
  Protected Resultat.s
  Static Titre
  If titre = 1
  AddElement(ElementsMenu())
  ElementsMenu() = "MenuTitle(" + GetGadgetText(#Str_Element_Menu) + ")"
  EndIf  
  ;SetGadgetText(#Str_Enum, "#Menu_" + GetGadgetText(#Str_Element_Menu))
  ;Resultat = GetGadgetText(#Str_Enum)
  ;AddElement(ElementsMenu())
  ;ElementsMenu() = GetGadgetText(#Str_Element_Menu)
  ;SetGadgetText(#Edt, GetGadgetText(#Str_Element_Menu))
EndProcedure

Procedure Monter_menu()
EndProcedure

Procedure Descendre_menu()
EndProcedure

Procedure Sauvegarder()
  MessageRequester("Information", "Le fichier a été copié dans le presse_papiers", #MB_ICONINFORMATION)
  Fermer_Fenetre_principale()
EndProcedure

Procedure Titre() ; titre du menu
  Static Titre = 1
  ProcedureReturn Titre
EndProcedure

Procedure Niveau_1()
  AddElement(ElementsMenu())
  ElementsMenu() = "MenuItem"
EndProcedure

Procedure Niveau_2()
  AddElement(ElementsMenu())
  ElementsMenu() = "OpenSubMenu"
  AddElement(ElementsMenu())
  ElementsMenu() = "MenuItem"
EndProcedure

Procedure Niveau_3()
EndProcedure

Procedure Niveau_4()
EndProcedure

Procedure Entrer_Element_Menu()
EndProcedure

Procedure Icone()
EndProcedure

Procedure Enumerer_Element()
EndProcedure

;gestion des cases à cocher
Procedure Alt()
  If GetGadgetState(#Chk_Alt) = 1
    SetGadgetState(#Chk_Ctrl, 0)
    SetGadgetState(#Chk_Shift, 0)
  EndIf  
EndProcedure

Procedure Ctrl()
  If GetGadgetState(#Chk_Ctrl) = 1
    SetGadgetState(#Chk_Alt, 0)
    SetGadgetState(#Chk_Shift, 0)
  EndIf  
EndProcedure

Procedure Shift()
  If GetGadgetState(#Chk_Shift) = 1
    SetGadgetState(#Chk_Ctrl, 0)
    SetGadgetState(#Chk_Alt, 0)
  EndIf  
EndProcedure

Procedure Ajouter_Raccourci()
  If GetGadgetState(#Chk_Alt) = 0 And GetGadgetState(#Chk_Ctrl) = 0 And GetGadgetState(#Chk_Shift) = 0
    Debug "#PB_Shortcut_" + GetGadgetText(#Cmb_Raccourcis)
  ElseIf  GetGadgetState(#Chk_Alt)
    Debug "Alt + #PB_Shortcut_" + GetGadgetText(#Cmb_Raccourcis)
  ElseIf GetGadgetState(#Chk_Ctrl)
    Debug "Ctrl + #PB_Shortcut_" + GetGadgetText(#Cmb_Raccourcis)
  ElseIf GetGadgetState(#Chk_Shift)
    Debug "Shift + #PB_Shortcut_" + GetGadgetText(#Cmb_Raccourcis)
  EndIf
EndProcedure
Procedure OpenWindow_Fenetre_Menu()
  If OpenWindow(#Fenetre_Menu, 447, 196, 530, 400, "Generateur de Menu", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    TextGadget(#Txt_Test, 5, 0, 70, 20, "Test >")
    EditorGadget(#Edt, 10, 20, 510, 240)
    TextGadget(#Txt_Texte, 5, 265, 35, 20, "Texte :")
    TextGadget(#Txt_Icone, 5, 315, 40, 20, "Icone :")
    TextGadget(#Txt_Enum, 5, 340, 40, 20, "Enum :")
    ButtonGadget(#Btn_Titre, 5, 290, 40, 20, "Titre")
    ButtonGadget(#Btn_Niv_1, 49, 290, 50, 20, "Niveau 1")
    ButtonGadget(#Btn_Niv_2, 104, 290, 50, 20, "Niveau 2")
    ButtonGadget(#Btn_Niv_3, 159, 290, 50, 20, "Niveau 3")
    ButtonGadget(#Btn_Niv_4, 214, 290, 50, 20, "Niveau 4")
    StringGadget(#Str_Element_Menu, 50, 265, 215, 20, "")
    StringGadget(#Str_Icone, 50, 315, 215, 20, "", #PB_String_ReadOnly)
    StringGadget(#Str_Enum, 50, 340, 215, 20, "")
    ButtonGadget(#Btn_Separateur, 269, 265, 60, 20, "Separateur")
    ButtonGadget(#Btn_Remplacer, 335, 265, 60, 20, "Remplacer")
    ButtonGadget(#Btn_Inserer, 400, 265, 60, 20, "Inserer")
    ButtonGadget(#Btn_Ajouter, 465, 265, 60, 20, "Ajouter")
    ButtonGadget(#Btn_Vider, 269, 290, 60, 20, "Vider")
    ButtonGadget(#Btn_Supprimer, 400, 290, 125, 20, "Supprimer")
    ButtonGadget(#Btn_Icone_plus, 269, 315, 20, 20, "+")
    ButtonGadget(#Btn_Valider_Element_Menu, 269, 340, 20, 20, Chr($F12E))
    ButtonGadget(#Btn_Icone_Moins, 294, 315, 20, 20, "-")
    ButtonGadget(#Btn_Monter_Menu, 335, 290, 25, 20, Chr($F062))
    ButtonGadget(#Btn_Descendre_Menu, 370, 290, 25, 20, Chr($F063))
    TextGadget(#Txt_Raccourci, 335, 315, 65, 20, "Raccourci :")
    ComboBoxGadget(#Cmb_Raccourcis, 400, 315, 125, 20)
    CheckBoxGadget(#Chk_Alt, 335, 340, 65, 20, "Alt")
    CheckBoxGadget(#Chk_Ctrl, 405, 340, 65, 20, "Ctrl")
    CheckBoxGadget(#Chk_Shift, 475, 340, 65, 20, "Shift")
    ButtonGadget(#Btn_Annuler, 130, 370, 130, 20, "Annuler")
    ButtonGadget(#Btn_Ok, 280, 370, 130, 20, "Menu termine")
    
    ;Remplir le combo
    Read.s Touche.s
    Restore raccourcis
    i = 0
    While Touche <> "Fin"
      AddGadgetItem(#Cmb_Raccourcis, - 1, Touche)
      Read.s Touche.s
      i+1  
    Wend 
    
    
    CreateMenu(0,WindowID(#Fenetre_Menu))
    
    ;Polices
    SetGadgetFont(#Btn_Monter_Menu, FontID(#Police))
    SetGadgetFont(#Btn_Descendre_Menu, FontID(#Police))
    SetGadgetFont(#Btn_Valider_Element_Menu, FontID(#Police))
    
    ;Gestion des événements
    BindEvent(#PB_Event_CloseWindow, @Fermer_Fenetre_principale(), #Fenetre_Menu)
    BindGadgetEvent(#Btn_Separateur, @Separateur())
    BindGadgetEvent(#Btn_Remplacer, @Remplacer())
    BindGadgetEvent(#Btn_Inserer, @Inserer())
    BindGadgetEvent(#Btn_Ajouter, @Ajouter())
    BindGadgetEvent(#Btn_Vider, @Vider())
    BindGadgetEvent(#Btn_Supprimer, @Supprimer())
    BindGadgetEvent(#Btn_Icone_plus, @Icone_plus())
    BindGadgetEvent(#Btn_Icone_Moins, @Icone_moins())
    BindGadgetEvent(#Btn_Valider_Element_Menu, @Valider_Element_Menu())
    BindGadgetEvent(#Btn_Monter_Menu, @Monter_menu())
    BindGadgetEvent(#Btn_Descendre_Menu, @Descendre_menu())
    BindGadgetEvent(#Btn_Annuler, @Fermer_Fenetre_principale())
    BindGadgetEvent(#Btn_Ok, @Sauvegarder())
    BindGadgetEvent(#Btn_Titre, @Titre())
    BindGadgetEvent(#Btn_Niv_1, @Niveau_1())
    BindGadgetEvent(#Btn_Niv_2, @Niveau_2())
    BindGadgetEvent(#Btn_Niv_3, @Niveau_3())
    BindGadgetEvent(#Btn_Niv_4, @Niveau_4())
    BindGadgetEvent(#Str_Element_Menu, @Entrer_Element_Menu())
    BindGadgetEvent(#Str_Icone, @Icone())
    BindGadgetEvent(#Str_Enum, @Enumerer_Element())
    BindGadgetEvent(#Cmb_Raccourcis, @Ajouter_Raccourci())
    BindGadgetEvent(#Chk_Alt, @Alt())
    BindGadgetEvent(#Chk_Ctrl, @Ctrl())
    BindGadgetEvent(#Chk_Shift, @Shift())
  EndIf
EndProcedure

OpenWindow_Fenetre_Menu()

;{- Event loop
Repeat
  Evenement = WaitWindowEvent()
ForEver
;
;}
DataSection
  Raccourcis:
  Data.s "Back",
         "Tab",
         "Clear",
         "Return",
         "Pause",
         "Print",
         "Capital",
         "Escape",
         "Space",
         "PageUp",
         "PageDown",
         "End",
         "Home",
         "Left",
         "Up",
         "Right",
         "Down",
         "Select",
         "Execute",
         "Snapshot",
         "Insert",
         "Delete",
         "Help",
         "0",
         "1",
         "2",
         "3",
         "4",
         "5",
         "6",
         "7",
         "8",
         "9",
         "A",
         "B",
         "C",
         "D",
         "E",
         "F",
         "G",
         "H",
         "I",
         "J",
         "K",
         "L",
         "M",
         "N",
         "O",
         "P",
         "Q",
         "R",
         "S",
         "T",
         "U",
         "V",
         "W",
         "X",
         "Y",
         "Z",
         "LeftWindows",
         "RightWindows",
         "Apps",
         "Pad0",
         "Pad1",
         "Pad2",
         "Pad3",
         "Pad4",
         "Pad5",
         "Pad6",
         "Pad7",
         "Pad8",
         "Pad9",
         "Multiply",
         "Add",
         "Separator",
         "Subtract",
         "Decimal",
         "Divide",
         "F1",
         "F2",
         "F3",
         "F4",
         "F5",
         "F6",
         "F7",
         "F8",
         "F9",
         "F10",
         "F11",
         "F12",
         "F13",
         "F14",
         "F15",
         "F16",
         "F17",
         "F18",
         "F19",
         "F20",
         "F21",
         "F22",
         "F23",
         "F24",
         "Numlock",
         "Scroll",
         "Fin"
EndDataSection

Re: Au secours, je me noye dans mon programme

Publié : lun. 09/nov./2015 21:44
par venom
Salut Micoute,

Ok pour aidé mais tu bloque sur quoi exactement ? Tu voudrais que sa donne quoi ?
C'est un peut vague (sans faire de jeu de mot avec ta noyade) :wink:






@++

Re: Au secours, je me noye dans mon programme

Publié : lun. 09/nov./2015 22:20
par microdevweb
@Micoute,

Je doit reconnaître que je comprend pas trop l'idée, un générateur de menu soit. Mais quant je lance ton programme, cela ma l'air tellement complexe. Perso pour mon RAD, je viens de faire également un générateur de menu. Mais je gère cela dans sous forme d'arbre, alors dis nous en plus pour pouvoir t'aider.

Re: Au secours, je me noye dans mon programme

Publié : mar. 10/nov./2015 7:32
par Micoute
Bonjour à tous,
En fait, avec mon programme, je voudrais choisir mes options de mon menu qui se placeraient dans le presse-papiers et que je collerais dans mon futur programme.

Il faudrait que je puisse faire un truc du genre :

Fichier Edition
Ouvrir Ctrl+O Copier Ctrl+C
Sauvegarder Ctrl+S Coller Ctrl+V
Fermer Couper Ctrl+X
>séparateur<
Quitter Ctrl+Q


Merci beaucoup de bien vouloir m'aider.

Re: Au secours, je me noye dans mon programme

Publié : mar. 10/nov./2015 17:11
par Micheao
Samut Micoute

Pas mal comme programme j'apprecie

Re: Au secours, je me noye dans mon programme

Publié : mer. 11/nov./2015 19:16
par Ar-S
Je ferai un truc dans ce genre.
C'est pas terminé et optimisable mais j'ai dejà passé pas mal de temps pour faire ça.
Manque :
- la génération des lignes de code des raccourcis
- l'ajout de la barre de séparation
- la copie au clique sur copier..

Code : Tout sélectionner


Declare CreerMenu()
Declare CaptureMenu()
Declare.s Affiche_apercu()

Enumeration
#WiN
#PANEL
#T_MENU
#T_RAC
#T_ITEM
#BT_MENU
#BT_ITEM
#MENU_NAME
#ITEM_NAME
#APERCU
#BT_COPIER
#BLOC1
#BLOC2
#BT_VALIDER

#I1
#I2
#I3
#I4
#I5
#I6
#I7
#I8
#I9
#I10
#I11
#I12
#I13
#I14
#I15
#I16
#I17
#I18
#I19
#I20

#TI1
#TI2
#TI3
#TI4
#TI5
#TI6
#TI7
#TI8
#TI9
#TI10
#TI11
#TI12
#TI13
#TI14
#TI15
#TI16
#TI17
#TI18
#TI19
#TI20

#RI1
#RI2
#RI3
#RI4
#RI5
#RI6
#RI7
#RI8
#RI9
#RI10
#RI11
#RI12
#RI13
#RI14
#RI15
#RI16
#RI17
#RI18
#RI19
#RI20

EndEnumeration
Global NewList Apercu.s()

; 1ere ligne tjrs identique
AddElement(apercu())
apercu() = "If CreateMenu(0, WindowID(0)) "+Chr(10)
      
Procedure CreerMenu()
   
   HideGadget(#BLOC1,0)
   DisableGadget(#BT_MENU,1)
   
EndProcedure


Procedure CaptureMenu()
      Shared MenuName.s
      MenuName = GetGadgetText(#MENU_NAME)
EndProcedure

Procedure.s Affiche_apercu()
   A$ = ""
   ResetList( Apercu() )
   While NextElement(Apercu())
      A$+Apercu()
      Debug Apercu()
   Wend
   SetGadgetState(#PANEL,1)
   SetGadgetText(#APERCU, A$)
   
EndProcedure


If OpenWindow(#WIN, 200, 200, 600, 600, "Exemple de menu", #PB_Window_SystemMenu)
    
    PanelGadget(#PANEL,0,0,600,500)
    AddGadgetItem (#PANEL, -1, "Création")
    
    ButtonGadget(#BT_MENU,2,12, 200,25,"Créer un menu")
    
    ContainerGadget(#BLOC1, 0, 0, 600, 500, #PB_Container_Raised)
    TextGadget(#T_MENU,2,40,100,20,"Nom menu")
    StringGadget(#MENU_NAME,102,40,150,25,"")
    
    ButtonGadget(#BT_ITEM,2,70, 150,25,"Ajouter des Items")
    
    
     CloseGadgetList()
      
      HideGadget(#BLOC1,1)
      
   AddGadgetItem (1, -1,"Aperçu")
   ContainerGadget(#BLOC2, 0, 0, 600, 400, #PB_Container_Raised) 
      EditorGadget(#APERCU, 2, 2, 600,300)
      ButtonGadget(#BT_COPIER, 3, 310, 80, 24,"COPIER")
      SetGadgetColor(#APERCU,#PB_Gadget_BackColor,$0)
      SetGadgetColor(#APERCU,#PB_Gadget_FrontColor,$FFFFFF)
    
    CloseGadgetList()

    
    
    Repeat 

    Select EventGadget()
    
    Case #PANEL ; Panel
      If GetGadgetState(#PANEL) = 1
         If show = 0
         SetGadgetText(#APERCU,Affiche_apercu())
         show+1
         EndIf
      EndIf
      
    
    Case #BT_MENU
       CreerMenu()
   
    Case #MENU_NAME
      CaptureMenu()
      
   Case #BT_ITEM
      
      If Len(GetGadgetText(#MENU_NAME)) > 0
         
         C$ = InputRequester("Item","Combien d'items voulez vous ajouter ? (1 à 10)","")
         NbrItem = Val(C$)
         If NbrItem > 0 And NbrItem < 11
            DisableGadget(#MENU_NAME,1)
            Debug "Item : " + NbrItem
            OpenGadgetList(#BLOC1,#BT_ITEM)
            Yitem = 100
            For i = #I1 To #I1+NbrItem-1
               StringGadget(i,2,Yitem,150,25,"")
               TextGadget(i+10,160,Yitem,50,25," CTRL + ")
               StringGadget(i+20,215,Yitem,50,25,"")

               Yitem + 28
            Next

            ButtonGadget(#BT_VALIDER, 2, Yitem, 100, 20, "VALIDER")
            
            CloseGadgetList()
            DisableGadget(#BT_ITEM,1)
         Else
            MessageRequester("Erreur","Vous devez choisir entre 1 et 10 item !")
            
         EndIf
         
         Else
            MessageRequester("Erreur","Vous devez d'abord choisir un nom de menu")
            
      EndIf
    
    Case #BT_VALIDER
      
      NumI = 1
      AddElement( Apercu() )
      Apercu() = "MenuTitle(" + Chr(34) + MenuName + Chr(34) +")" + Chr(10)
   
      For i = #I1 To #I1+NbrItem-1       
         AddElement( apercu() )
         apercu() = "MenuItem(" + Str(NumI) +" , " + Chr(34) +  GetGadgetText(i)  +Chr(34) + " + Chr(9) + " + Chr(34) + "Ctrl + " + GetGadgetText(i+20) +Chr(34)+ ")"+Chr(10)
         NumI + 1
      Next
      
      AddElement( apercu() )
      apercu() = "endif" + Chr(10)
      AddElement( apercu() )
      apercu() =  "Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow"
      
      If affiche = 0
      Affiche_apercu()
      affiche + 1
      EndIf
      
EndSelect

Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf



Re: Au secours, je me noye dans mon programme

Publié : mer. 11/nov./2015 19:33
par Micoute
Merci beaucoup Ar-s, C'est une meilleure approche que la mienne, j'aime beaucoup.

Re: Au secours, je me noye dans mon programme

Publié : jeu. 12/nov./2015 11:46
par microdevweb
Bonjour micoute voila comment moi je voie cela
Image

En premier Copier coller le code ci-dessous et le sauver dans répertoire ex: main.pb
Compiler ensuite le fichier ex: main.pb

Code : Tout sélectionner

;-* Téléchargement des fichiers
If InitNetwork()=0
      MessageRequester("Erreur","Pas de connection internet")
      End
EndIf
DowloadFile$="Tree.pbi"+Chr(10)+"deletered.ico"+Chr(10)+"label.ico"+Chr(10)+
             "make.ico"+Chr(10)+"menu.ico"+Chr(10)+"menuItem.ico"+Chr(10)+
             "pencil.ico"+Chr(10)+"keyboard_shortcuts.ico"
Nb=CountString(DowloadFile$,Chr(10))
HttpAcces$="http://www.microdevweb.com/source/MemuMaker/"
For N=1 To Nb+1
      Txt$=StringField(DowloadFile$,N,Chr(10))
      If FileSize(Txt$)=-1
            If ReceiveHTTPFile(HttpAcces$+Txt$,Txt$)=0
                  MessageRequester("Erreur Http","Le fichier "+Txt$+" n'a peu être téléchargé")
                  End
            EndIf
      EndIf
Next
MessageRequester("Info","Tous les fichier on bien été télécharhgés")
End
;}
2 ème partie copiez collez le code ci dessous, en dessous du premier et voila

Code : Tout sélectionner

XIncludeFile "Tree.pbi"
EnableExplicit
Enumeration 
      #MainForm
      #MainTree
      #StrTitle
      #StrCallback
      #BtSubmit
      #BtChancel
      #TitleForm
      #ArialM
      #ItemForm
      #Bt_Build
EndEnumeration
Enumeration 
      #Tp_Title
      #Tp_Item
      #Tp_CallBack
      #Tp_Shorcut
EndEnumeration
#TreeWidth=400
Structure Item
      Nivel.i
      id$
      callBack$
      controlKey$
      ShortucKey$
      name$
EndStructure
Structure Title
      name$
      List myItem.Item()
EndStructure
Structure Menu
      List myTitle.Title()
      Id$
      WdId$
EndStructure
Global myMenu.Menu
myMenu\Id$="#MainMenu"
myMenu\WdId$="#MainForm"
Global gModeNew.b,gCurrentWindow
LoadFont(#ArialM,"Arial",12,#PB_Font_HighQuality)

Declare OpenMenuTitleForm()
Declare FillsTree()
Declare OpenMenuItemForm()
Procedure EditMenuTitle(Type,Value)
       gModeNew=#False
      OpenMenuTitleForm()
      ChangeCurrentElement(myMenu\myTitle(),Value)
      SetGadgetText(#StrTitle,myMenu\myTitle()\name$)
      SetActiveGadget(#StrTitle)
EndProcedure
Procedure DeleteMenuTitle(Type,Value)
      
EndProcedure
Procedure AddMenuItem(Type,Value)
      ChangeCurrentElement(myMenu\myTitle(),Value)
      gModeNew=#True
      OpenMenuItemForm()
      SetActiveGadget(#StrTitle)
EndProcedure
Procedure AddMenuTitle(Type,Value)
      gModeNew=#True
      OpenMenuTitleForm()
      SetActiveGadget(#StrTitle)
EndProcedure
Procedure EditMenuItem(Type,Value)
     ChangeCurrentElement(myMenu\myTitle()\myItem(),Value)
      gModeNew=#False
      OpenMenuItemForm()
      SetActiveGadget(#StrTitle)
      With myMenu\myTitle()\myItem()
            SetGadgetText(#StrTitle,\name$)
            SetGadgetText(#StrCallback,\callBack$)
      EndWith
EndProcedure
Procedure DeleteMenuItem(Type,Value)
      
EndProcedure
Procedure CloseForm()
      DisableWindow(#MainForm,#False)
      CloseWindow(gCurrentWindow)
EndProcedure
Procedure SaveMenuItem()
      Protected Value$=GetGadgetText(#StrTitle)
      If Value$=""
            MessageRequester("Titre d'un élément","Le titre est obligatoire")
            SetActiveGadget(#StrTitle)
            ProcedureReturn 
      EndIf
      If gModeNew
            AddElement(myMenu\myTitle()\myItem())
      EndIf
      With myMenu\myTitle()\myItem()
            \id$="#M_"+myMenu\myTitle()\name$+Str(ListSize(myMenu\myTitle()\myItem()))
            \name$=Value$
            \callBack$=GetGadgetText(#StrCallback)
      EndWith
      FillsTree()
      CloseForm()
EndProcedure
Procedure SaveMenTitle()
      Protected Value$=GetGadgetText(#StrTitle)
      If Value$=""
            MessageRequester("Titre d'un menu","Le titre est obligatoire")
            SetActiveGadget(#StrTitle)
            ProcedureReturn 
      EndIf
      If gModeNew
            AddElement(myMenu\myTitle())
      EndIf
      With myMenu\myTitle()
            \name$=Value$
      EndWith
      FillsTree()
      CloseForm()
EndProcedure
Procedure SaveForm()
      Select gCurrentWindow
            Case #TitleForm
                  SaveMenTitle()
            Case #ItemForm
                  SaveMenuItem()
      EndSelect
EndProcedure
Procedure OpenMenuTitleForm()
      DisableWindow(#MainForm,#True)
      Protected W=280,M=10,H=30,WF=W+(M*2),HF=(H*3)+(M*3),X=M,Y=M
      Protected Flag=#PB_Window_ScreenCentered|#PB_Window_SystemMenu
      Protected Title$,Tmp
      gCurrentWindow=#TitleForm
      If gModeNew
            Title$="Nouveau titre de menu"
      Else  
            Title$="Eiditon d'un titre de menu"
      EndIf
      OpenWindow(gCurrentWindow,0,0,WF,HF,Title$,Flag,WindowID(#MainForm))
      Tmp=TextGadget(#PB_Any,X,Y,W,H,"Nom")
      SetGadgetFont(Tmp,FontID(#ArialM))
      Y+H
      StringGadget(#StrTitle,X,Y,W,H,"")
      SetGadgetFont(#StrTitle,FontID(#ArialM))
      Y+H+M
      W=(W/2)-M
      ButtonGadget(#BtSubmit,X,Y,W,H,"Valider")
      SetGadgetFont(#BtSubmit,FontID(#ArialM))
      X+W+(M*2)
      ButtonGadget(#BtChancel,X,Y,W,H,"Annuler")
      SetGadgetFont(#BtChancel,FontID(#ArialM))
      BindEvent(#PB_Event_CloseWindow,@CloseForm(),gCurrentWindow)
      BindGadgetEvent(#BtChancel,@CloseForm())
      BindGadgetEvent(#BtSubmit,@SaveForm())
EndProcedure
Procedure OpenMenuItemForm()
      DisableWindow(#MainForm,#True)
      Protected W=280,M=10,H=30,WF=W+(M*2),HF=(H*5)+(M*5),X=M,Y=M
      Protected Flag=#PB_Window_ScreenCentered|#PB_Window_SystemMenu
      Protected Title$,Tmp
      gCurrentWindow=#ItemForm
      If gModeNew
            Title$="Nouveau élément du titre de menu"
      Else  
            Title$="Editon d'un élément du titre de menu"
      EndIf
      OpenWindow(gCurrentWindow,0,0,WF,HF,Title$,Flag,WindowID(#MainForm))
      Tmp=TextGadget(#PB_Any,X,Y,W,H,"Nom")
      SetGadgetFont(Tmp,FontID(#ArialM))
      Y+H
      StringGadget(#StrTitle,X,Y,W,H,"")
      SetGadgetFont(#StrTitle,FontID(#ArialM))
      Y+H+M
      Tmp=TextGadget(#PB_Any,X,Y,W,H,"Procédure Callback")
      SetGadgetFont(Tmp,FontID(#ArialM))
      Y+H
      StringGadget(#StrCallback,X,Y,W,H,"")
      SetGadgetFont(#StrCallback,FontID(#ArialM))
      Y+H+M+M
      W=(W/2)-M
      ButtonGadget(#BtSubmit,X,Y,W,H,"Valider")
      SetGadgetFont(#BtSubmit,FontID(#ArialM))
      X+W+(M*2)
      ButtonGadget(#BtChancel,X,Y,W,H,"Annuler")
      SetGadgetFont(#BtChancel,FontID(#ArialM))
      BindEvent(#PB_Event_CloseWindow,@CloseForm(),gCurrentWindow)
      BindGadgetEvent(#BtChancel,@CloseForm())
      BindGadgetEvent(#BtSubmit,@SaveForm())
EndProcedure
Procedure FillsTree()
      Protected N
      Tree::ClearItem(#MainTree)
      Tree::AddItem(#MainTree,-1,"Menu",?Menu,0)
      Tree::DisableCheckBox(#MainTree,N,#False)
      Tree::AddItemButton(#MainTree,N,?label,16,@AddMenuTitle())
      N+1
      ForEach myMenu\myTitle()
            With myMenu\myTitle()
                  Tree::AddItem(#MainTree,-1,\name$,?label,1)
                  Tree::SetData(#MainTree,N,#Tp_Title,@myMenu\myTitle())
                  Tree::DisableCheckBox(#MainTree,N,#False)
                  Tree::AddItemButton(#MainTree,N,?pencil,16,@EditMenuTitle())
                  Tree::AddItemButton(#MainTree,N,?deletered,16,@DeleteMenuTitle())
                  Tree::AddItemButton(#MainTree,N,?menuItem,16,@AddMenuItem())
                  N+1
                  ForEach \myItem()
                        Tree::AddItem(#MainTree,-1,\myItem()\name$,?menuItem,2)
                        Tree::SetData(#MainTree,N,#Tp_Item,@\myItem())
                        Tree::DisableCheckBox(#MainTree,N,#False)
                        Tree::AddItemButton(#MainTree,N,?pencil,16,@EditMenuItem())
                        Tree::AddItemButton(#MainTree,N,?deletered,16,@DeleteMenuItem())
                        N+1
                  Next
            EndWith
      Next
      Tree::Draw(#MainTree)
EndProcedure
Procedure Exit()
      End
EndProcedure
Macro mRC
      Chr(13)+Chr(10)
EndMacro
Macro mCote(Txt)
      Chr(34)+Txt+Chr(34)
EndMacro
Macro mTab
      Chr(9)
EndMacro
Procedure BuildMenu()
      Protected Compil$="CreateMenu("+myMenu\Id$+",WindowID("+myMenu\WdId$+")"+mRC
      Protected LstEnum$
      ForEach myMenu\myTitle()
            With myMenu\myTitle()
                  Compil$+"MenuTitle("+mCote(\name$)+")"+mRC
            EndWith
            ForEach myMenu\myTitle()\myItem()
                  With myMenu\myTitle()\myItem()
                        Compil$+"MenuItem("+myMenu\Id$+","+\id$+","+mCote(\name$)+")"+mRC
                        Compil$+"BindMenuEvent("+myMenu\Id$+","+\id$+",@"+\callBack$+")"+mRC
                        LstEnum$+\id$+Chr(10)
                  EndWith
            Next
      Next
      Protected ValReturn$="Enumeration Menu"+mRC
      ValReturn$+mTab+myMenu\Id$+mRC
      Protected Nb=CountString(LstEnum$,Chr(10)),N
      For N=1 To Nb+1
            ValReturn$+mTab+StringField(LstEnum$,N,Chr(10))+mRC
      Next
      ValReturn$+"EndEnumeration"+mRC
      ValReturn$+Compil$
      SetClipboardText(ValReturn$)
EndProcedure
Procedure OpenMainForm()
      OpenWindow(#MainForm,0,0,800,600,"Menu maker",#PB_Window_Maximize|#PB_Window_SystemMenu)
      Tree::Create(#MainTree,0,0,#TreeWidth,WindowHeight(#MainForm))
      FillsTree()
      BindEvent(#PB_Event_CloseWindow,@Exit(),#MainForm)
      ButtonGadget(#Bt_Build,#TreeWidth+50,50,100,30,"Build")
      BindGadgetEvent(#Bt_Build,@BuildMenu())
EndProcedure
;-* Run Programme
OpenMainForm()
;}
;-* Main loop
Repeat:WaitWindowEvent():ForEver
;-*
DataSection
      deletered: :IncludeBinary "deletered.ico"
      label: :IncludeBinary "label.ico"
      make: :IncludeBinary "make.ico"
      menu: :IncludeBinary "menu.ico"
      menuItem: :IncludeBinary "menuItem.ico"
      pencil: :IncludeBinary "pencil.ico"
      keyboard_shortcuts: :IncludeBinary "keyboard_shortcuts.ico"
EndDataSection
Voila j'espère que cela pourra t'aidé

Note: bon j'ai mis en place la suppression et les raccourcis clavier, tu peux faire cela même chose avec le tree standard mais pas placer les Boutons

Re: Au secours, je me noye dans mon programme

Publié : jeu. 12/nov./2015 14:15
par Micoute
Bonjour microdevweb et merci beaucoup, j'aime bien ton approche aussi, je vais m'amuser à le compéter, ça ne devrait pas prendre trop de temps puisque que c'est déjà pré-mâché.

Merci encore.

Re: [Résolu] Au secours, je me noye dans mon programme

Publié : jeu. 12/nov./2015 14:37
par microdevweb
Pour te faciliter la vie pour les raccourcis tu peux utilisé une macro, ainsi tu fais une combo avec toute lettre
et utilise une macro pour compléter

Code : Tout sélectionner

Macro getShort(Leters)
      #PB_Shortcut_#Leters
EndMacro
OpenWindow(0,0,0,800,600,"teste",#PB_Window_SystemMenu)
CreateMenu(0,WindowID(0))
MenuTitle("File")
MenuItem(0,"Open")
AddKeyboardShortcut(0,getShort(A),0)
Repeat
    Event=WaitWindowEvent()  
Until Event=#PB_Event_CloseWindow

Re: [Résolu] Au secours, je me noye dans mon programme

Publié : jeu. 12/nov./2015 15:22
par Micoute
Merci encore.

Re: [Résolu] Au secours, je me noye dans mon programme

Publié : mar. 24/nov./2015 12:21
par Ar-S
Petite macro bien sympa ça microdevweb. Merci