Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: xmenu: menu paramétrable dynamiquement Mar 16 Avr 2013 - 19:19 | |
| A l'aide de la nouvelle version V2.14 du 16 Avril 2013 de KGF.dll, j'ai fait un menu qui peut être paramétré dynamiquement, sans modification du code. Tout est dans des fichiers paramètres: xmenu.ini ==> contient la liste des sous-menus menu_xxx.ini ==> contient le sous-menu xxx (qui doit être mentionné comme xxx dans xmenu.ini) Dans les fichiers des sous-menus, chaque ligne décrit une ligne du sous-menu. Il s'agit d'une simple chaîne de caractères dont les informations sont séparées par des virgules, et éventuellement entourés de guillemets. Les 4 champs de chaque ligne sont: libellé,programme,paramètres,dossier Exemple: "Panoramic V 0.9.23","C:\Program Files\Panoramic Editor V 0.9.24\PANORAMIC_EDITOR.exe",, Le libellé sera affiché dans le sous-menu. Lors d'un clic sur la ligne, le programme paramétré sera lancé, avec les paramètres si ils sont présents, et en démarrant dans le dossier spécifié. L'astuce du programme, c'est un menu Outils qui contient 2 fonctions: Recharger ==> reconstruit l'ensemble des menus et sous-menus à partir des fichiers *.ini Modifier ==> affiche une combo avec la liste des fichiers paramètres. On sélectionne un des fichiers, puis on clique sur le bouton Modifier. La combo disparaît, et le fichier choisi s'affiche dans le bloc notes (ou n'importe quel programme associé aux fichiers *.INI). On peut ainsi ajouter un sous-menu en ajoutant la ligne dans xmenu.ini, en supprimer un ou les déplacer, et on peut modifier n'importe lequel des fichiers menu_xxx.ini. Si l'on a ajouté un élément dans xmenu.ini, lors de la fonction Recharger, ce fichier menu_xxx.ini correspondant sera automatiquement créé, et le menu apparaît, vide. On peut alors modifier ce fichier qui est ajouté à la combo, et ce menu sera affiché lors de la prochaine fonction Recharger. Le programme devient intéressant si l'on crée l'EXE et un place un raccourci vers cet exe sur le bureau. Voici le code: - Code:
-
' xmenu.bas ' ' Le fichier xmenu.ini contient la liste des menus. ' Définis à ce jour: ' - menu_jeux.ini ' - menu_panoramic.ini ' - menu_delphi.ini ' - menu_help.ini ' ' les fichiers des menus individuels contiennent les informations suivantes: ' libellé,programme,paramètres,dossier ' il est conseillé d'entourer chaque champ par des guillemets. ' ' tous ces menus seront présentés comme menus Panoramic. ' les programmes seront lancés par EXECUTE. ' ' KGF.dll est utilisé pour déterminer le nom court à partir du nom log ' et accessoirement pour décoder une ligne dans les fichiers menu_xxx.ini ' ' Le menu Outils est fixe et imposé. Il contient une fonction qui permet ' de recharger.tous les menus, ainsi qu'une fonction qui permet d'éditer ' les fichiers paramètres. ' Le fichier xmenu.ini contient la liste des sous-menus. ' Les sous-menus doivent s'appeler menu_xxx.ini avec xxx étant le nom ' du sous-menu dans xmenu.ini. ' Après une modification, la fonction Recharger affiche le menu modifié.
KGF_initialize("KGF.dll")
labels() constantes() variables() form0() objets() menus()
end
sub labels() label click_menu, refresh, modif, modifier end_sub
sub constantes() dim xmenu$ : xmenu$ = "xmenu.ini" end_sub
sub variables() dim no%, no1%, no2%, nox%, noy% dim no_menus%, no_objets%, no_refresh%, no_combo% dim f$, s$, i%, s1$, s2$, s3$ dim n%, n_menu%, n_ligne% end_sub
sub form0() border_small 0 : height 0,45 : caption 0,"Menu Klaus" no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Outils" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Recharger" on_click no%,refresh no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Modifier" on_click no%,modif end_sub
sub objets() no% = no% + 1 : dlist no% : no_menus% = no% no% = no% + 1 : dlist no% : no_objets% = no% no% = no% + 1 : combo no% : no_combo% = no% top no%,10 : left no%,10 : width no%,100 no% = no% + 1 : button no% : top no%,10 : left no%,130 caption no%,"Modifier" : on_click no%,modifier no_refresh% = no% end_sub
sub menus() if file_exists(xmenu$)=0 file_open_write 1,xmenu$ ' ******************************************************** ' *********** adapter ici la liste des sous-menus ******** ' *********** à créer automatiquement ******** ' ******************************************************** file_writeln 1,"menu_jeux.ini" file_writeln 1,"menu_panoramic.ini" file_writeln 1,"menu_delphi.ini" file_writeln 1,"menu_help.ini" ' ******************************************************** ' *********** fin de la liste ******** ' ******************************************************** file_close 1 end_if clear no_objets% clear no_combo% item_add no_combo%,"xmenu" file_open_read 1,xmenu$ while file_eof(1)=0 file_readln 1,f$ item_add no_menus%,f$ if file_exists(f$)=0 file_open_write 2,f$ file_close 2 end_if s$ = f$ i% = instr(s$,"_") if i%>0 then s$ = mid$(s$,i%+1,len(s$)) i% = instr(s$,".") if i%>0 then s$ = left$(s$,i%-1) item_add no_combo%,s$ no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% item_add no_objets%,str$(no%) caption no%,s$ ' ici, charger le sous-menu file_open_read 2,f$ nox% = 128 + count(no_menus%) : dlist nox% while file_eof(2)=0 file_readln 2,f$ item_add nox%,f$ KGFDelimitedTextExtract(f$,",",1) s1$ = KGFDelimitedTextExtract$ noy% = nox%*32 + count(nox%) sub_menu noy% : parent noy%,no2% : caption noy%,s1$ item_add no_objets%,str$(noy%) if left$(s1$,1)<>"-" then on_click noy%,click_menu end_while file_close 2 end_while file_close 1 end_sub
click_menu: n% = number_click n_menu% = bin_and(n%,127*32) / 32 n_ligne% = bin_and(n%,31) s$ = item_read$(n_menu%+128,n_ligne%) KGFDelimitedTextExtract(s$,",",2) s1$ = KGFDelimitedTextExtract$ KGFDelimitedTextExtract(s$,",",3) s2$ = KGFDelimitedTextExtract$ KGFDelimitedTextExtract(s$,",",4) s3$ = KGFDelimitedTextExtract$ ExecuteProgram(s1$,s2$,s3$) return refresh: while count(no_objets%)>0 n% = val(item_read$(no_objets%,count(no_objets%))) item_delete no_objets%,count(no_objets%) delete n% end_while no% = no_refresh% menus() return modif: height 0,90 return modifier: height 0,45 if text$(no_combo%)="" then return s$ = text$(no_combo%) if s$="xmenu" s1$ = dir_current$ + "\xmenu.ini" else s1$ = dir_current$ + "\menu_"+s$+".ini" end_if s2$ = "" s3$ = "" ExecuteProgram(s1$,s2$,s3$) return #INCLUDE "KGF_SUB.bas"
Voici mes fichiers de paramétrage: xmenu.ini: - Code:
-
menu_jeux.ini menu_panoramic.ini menu_delphi.ini menu_help.ini menu_jeux.ini: - Code:
-
"Patience","C:\Program Files\PySol Fan Club edition\PySol.exe",,, "Eclater les bulles","C:\Documents and Settings\Klaus\Mes documents\Mes projets Panoramic\bulles\bulles.exe",,,
menu_panoramic.ini: - Code:
-
"Panoramic V 0.9.24","C:\Program Files\Panoramic Editor V 0.9.24\PANORAMIC_EDITOR.exe",,, menu_delphi.ini: - Code:
-
"Delphi","C:\Program Files\Borland\Delphi6\Bin\Delphi32.exe",,, "KGF.dll","C:\Documents and Settings\Klaus\Mes documents\Mes projets Delphi\KGF\KGF.dpr",,, menu_help.ini: - Code:
-
"Help and Doc","C:\Program Files\IBE Software\HelpNDoc 3\Hnd3.exe",,, "KGF.chm modif","C:\Documents and Settings\Klaus\Mes documents\Mes projets Panoramic\Help file\KGF_CHM\KGF.hnd",,, "BDR_SUB.chm modif","C:\Documents and Settings\Klaus\Mes documents\Mes projets Panoramic\Help file\BDR_SUB\BDR_SUB.hnd",,, -,,,, "KGF.chm","C:\Documents and Settings\Klaus\Mes documents\Mes projets Panoramic\Help file\KGF_CHM\KGF.chm",,, "BDR_SUB.chm","C:\Documents and Settings\Klaus\Mes documents\Mes projets Panoramic\Help file\BDR_SUB\BDR_SUB.chm",,,
Dernière édition par Klaus le Mer 17 Avr 2013 - 13:37, édité 2 fois | |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: xmenu: menu paramétrable dynamiquement Mer 17 Avr 2013 - 8:32 | |
| oui, c'est une des fonctions que j'ai remarqué dans ta DLL (parmi d'autres), mais si un jour je me remets à faire un RPG (ce n'est pas au programme, j'ai pleins d'idées mais pas de temps), c'est clairement une fonction qui me sera bien utile (je peux la coder dans une procédure, mais comme ta DLL sera nécessaire certainement, autant s'en servir directement ) | |
|