Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Générateur de menu à partir d'un fichier texte Sam 26 Sep 2015 - 13:27 | |
| Dale le cadre d'un autre fil de discussion, j'avais posté ce petit outil pour générer le code Panoramic de création d'un menu avc sous-menus hiérarchisés sans limitation. Le voici, de façon autonome: On peut passer par un fichier texte, chargé dans un mémo, et générer le menu à partir de là. Voici un petit programme très simple qui réalise cela. Notons que "simple" ne veut pas dire "pas puissant". On peut créer autant de sous-menus et lignes de menus que tu veux, il gère le on_click et la génération autimatique des numéros d'objets. - Code:
-
' editeur_de_menu.bas ' ' Le menu est constitué dans un fichier texte. ' Me caractère "-" indique le niveau d'indention ' Le fichier est présenté dans un mémo, éditable. ' Il peut être sauvegardé et restauré. ' Un bouton permet de générer le code source du menu dans un autre mémo. ' Un spin donne le numéro d'objet de départ pour la création de tous les objets.
label load, save, generate, export, copy
dim no%, no1%, no_open%, no_save%, no_bas%, no_mnu%, no_stack%, no_start%, no_label% dim f$, i%, s$, niv%, gg$, lab$ gg$ = chr$(34)
width 0,1000 no% = 1000 : no_mnu% = no% no1% = no% memo no% : top no%,10 : left no%,10 : width no%,400 : height no%,300 : bar_both no% font_name no%,"Courier" : font_size no%,10 no% = no% + 1 : button no% : top no%,top(no1%) : left no%,left(no1%)+width(no1%)+10 caption no%,"Ouvrir" : on_click no%,load no% = no% + 1 : button no% : top no%,top(no%-1)+30 : left no%,left(no%-1) caption no%,"Sauver" : on_click no%,save no% = no% + 1 :alpha no% : top no%,top(no%-1)+50 : left no%,left(no%-1) caption no%,"Numéro de début:" no% = no% + 1 : no_start% = no% : spin no% top no%,top(no%-1)+20 : left no%,left(no%-1) : width no%,80 min no%,1 : max no%,10000 : position no%,100 no% = no% + 1 :alpha no% : top no%,top(no%-1)+30 : left no%,left(no%-1) caption no%,"Label onclick:" no% = no% + 1 : no_label% = no% : edit no% top no%,top(no%-1)+20 : left no%,left(no%-1) : width no%,80 no% = no% + 1 : button no% : top no%,top(no%-1)+50 : left no%,left(no%-1) caption no%,"Générer" : on_click no%,generate no% = no% + 1 : button no% : top no%,top(no%-1)+50 : left no%,left(no%-1) caption no%,"Exporter" : on_click no%,export no% = no% + 1 : button no% : top no%,top(no%-1)+30 : left no%,left(no%-1) caption no%,"Copier" : on_click no%,copy no% = no% + 1 : no_bas% = no% : memo no% top no%,top(no1%) : left no%,left(no1%+1)+width(no1%+1)+20 width no%,width(no1%) : height no%,height(no1%) :inactive no% no% = no% + 1 : no_open% = no% : open_dialog no% no% = no% + 1 : no_save% = no% : save_dialog no% no% = no% + 1 : no_stack% = no% : dlist no% end
load: filter no_open%,"Fichier source menu|*.mnu" f$ = file_name$(no_open%) if f$="_" then return if lower$(right$(f$,4))<>".mnu" then f$ = f$ + ".mnu" if file_exists(f$)=0 message "Ce fichier n'existe pas." message f$ return end_if file_load no_mnu%,f$ return save: filter no_save%,"Fichier source menu|*.mnu" f$ = file_name$(no_save%) if f$="_" then return if lower$(right$(f$,4))<>".mnu" then f$ = f$ + ".mnu" if file_exists(f$)=1 if message_information_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then return end_if file_save no_mnu%,f$ return export: filter no_save%,"Fichier source Panoramic|*.bas" f$ = file_name$(no_save%) if f$="_" then return if lower$(right$(f$,4))<>".bas" then f$ = f$ + ".bas" if file_exists(f$)=1 if message_information_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then return end_if file_save no_bas%,f$ message "Le texte généré a été enregistré." return copy: if count(no_bas%)=0 message "Il n'y a rien à copier." return end_if s$ = "" for i%=1 to count(no_bas%) s$ = s$ + item_read$(no_bas%,i%) +chr$(13) + chr$(10) next i% clipboard_string_copy s$ message "Le texte généré a été copié dans le presse-papier." return
generate: if count(no_mnu%)=0 message "Rien à générer." return end_if lab$ = trim$(text$(no_label%)) if len(lab$)=0 message "Le label n'est pas défini - 'Click' est utilisé par défaut." lab$ = "Click" text no_label%,lab$ end_if no% = position(no_start%) clear no_bas% clear no_stack% item_add no_bas%,"label "+lab$ item_add no_bas%,"main_menu "+str$(no%) item_add no_stack%,str$(no%) for i%=1 to count(no_mnu%) s$ = item_read$(no_mnu%,i%) niv% = 0 while left$(s$,1)="-" niv% = niv% + 1 s$ = mid$(s$,2,len(s$)) end_while if niv%>=count(no_stack%) if niv%>(count(no_stack%)+1) message "Oups - erreur dans la structure à la ligne "+str$(i%)+chr$(13)+chr$(10)+s$ return end_if item_add no_stack%,str$(no%) else while niv%<(count(no_stack%)-1) item_delete no_stack%,count(no_stack%) end_while end_if no% = no% + 1 item_add no_bas%,"sub_menu "+str$(no%) item_add no_bas%," parent "+str$(no%)+","+item_read$(no_stack%,count(no_stack%)) item_add no_bas%," caption "+str$(no%)+","+gg$+s$+gg$ item_add no_bas%," on_click "+str$(no%)+","+lab$ next i% item_add no_bas%,"end" item_add no_bas%,"" item_add no_bas%,lab$ + ":" item_add no_bas%," Sub"+lab$+"()" item_add no_bas%," return" item_add no_bas%,"" item_add no_bas%,"sub Sub"+lab$+"()" item_add no_bas%," dim_local obj%" item_add no_bas%," obj% = number_click" item_add no_bas%," select obj%" item_add no_bas%," case "+str$(position(no_start%)+1) item_add no_bas%,"' case " item_add no_bas%,"' case " item_add no_bas%,"' case " item_add no_bas%," end_select" item_add no_bas%,"end_sub"
return
Il travaille avec des fichiers *.mnu qui contiennent les définitions des menus, et génère des *.bas. Voici un fichier mnu à titre d'exemple, pour les tests: - Code:
-
Fichiers -Ouvrir --Texte --Panoramic ---Ancien ---Nouveau --RTF -Nouveau --Texte --Panoramic ---Ancien ---Nouveau --RTF -Fermer Edition -Copier -Coller Et voici le code généré, parfaitement fonctionnel: - Code:
-
label Click main_menu 100 sub_menu 101 parent 101,100 caption 101,"Fichiers" on_click 101,Click sub_menu 102 parent 102,101 caption 102,"Ouvrir" on_click 102,Click sub_menu 103 parent 103,102 caption 103,"Texte" on_click 103,Click sub_menu 104 parent 104,102 caption 104,"Panoramic" on_click 104,Click sub_menu 105 parent 105,104 caption 105,"Ancien" on_click 105,Click sub_menu 106 parent 106,104 caption 106,"Nouveau" on_click 106,Click sub_menu 107 parent 107,102 caption 107,"RTF" on_click 107,Click sub_menu 108 parent 108,101 caption 108,"Nouveau" on_click 108,Click sub_menu 109 parent 109,108 caption 109,"Texte" on_click 109,Click sub_menu 110 parent 110,108 caption 110,"Panoramic" on_click 110,Click sub_menu 111 parent 111,110 caption 111,"Ancien" on_click 111,Click sub_menu 112 parent 112,110 caption 112,"Nouveau" on_click 112,Click sub_menu 113 parent 113,108 caption 113,"RTF" on_click 113,Click sub_menu 114 parent 114,101 caption 114,"Fermer" on_click 114,Click sub_menu 115 parent 115,100 caption 115,"Edition" on_click 115,Click sub_menu 116 parent 116,115 caption 116,"Copier" on_click 116,Click sub_menu 117 parent 117,115 caption 117,"Coller" on_click 117,Click end
Click: SubClick() return
sub SubClick() dim_local obj% obj% = number_click select obj% case 101 ' case ' case ' case end_select end_sub
| |
|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Générateur de menu à partir d'un fichier texte Sam 26 Sep 2015 - 13:59 | |
| Salut Klaus, J'ai voulu tester ton programme, mais il n'y a pas l'option "nouveau". Je suppose que c'est normal, vu qu'il doit être prévu pour GPP ou un autre éditeur. Je le testerai, MAIS JE NE SUIS PAS CONTENT Car je suis actuellement entrain de dévelloper un code pour faire la même chose... Et comme ma vitesse de programmation n'est pas la tienne, je me suis fait doubler. Sérieusement, tu as bien fait de te pencher sur le problème car ça va être utile pour Minibug et pour Pascal1000. Quand j'aurai terminé le mien, je le posterais et tu verras qu'il y a des options que tu n'a pas prévues ... Mais je garde le secret, sinon tu vas dégainer avant que j'ai eu le temps de dire OUF ! Alors à bientôt A+ | |
|