FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» COMPILATEUR V 0.9 beta 7 du 10 aout 2017
par Yannick Aujourd'hui à 1:58

» Pb 17 (en analyse): ITEM_SELECT ne fonctionne pas
par Jack Hier à 19:26

» Compilateur FBPano
par Mike Hier à 13:52

» un nouveau editeur panobasic
par Jean Claude Hier à 10:18

» Le compilateur.
par Pedro Alvarez Hier à 8:36

» Pb 16 (en analyse): ON_CLOSE plante à l'exécution
par Jack Mer 16 Aoû 2017 - 20:00

» Pb 15 (en analyse): TIMER_ON plante à l'exécution
par Jack Mer 16 Aoû 2017 - 19:58

» KGF_dll - nouvelles versions
par Yannick Dim 13 Aoû 2017 - 17:35

» probleme d'outil
par Yannick Dim 13 Aoû 2017 - 17:32

» Carte de France des régions
par Yannick Sam 12 Aoû 2017 - 21:33

» Pb 14 (en analyse): PRINT_LOCATE plante à l'exécution
par Jack Ven 11 Aoû 2017 - 22:37

» Petit avertissement [Mots réservés]
par papydall Ven 11 Aoû 2017 - 13:45

» Distances sur plan
par JL35 Jeu 10 Aoû 2017 - 21:29

» Tracé : Triangle, Carrée, Dents de scie, Sinusoïde redressée
par papydall Jeu 10 Aoû 2017 - 14:52

» Troncature dans une image
par JL35 Mer 9 Aoû 2017 - 13:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 xmenu: menu paramétrable dynamiquement

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: xmenu: menu paramétrable dynamiquement   Mar 16 Avr 2013 - 20: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 - 14:37, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: xmenu: menu paramétrable dynamiquement   Mar 16 Avr 2013 - 21:42

Excellente mise en application. Perso, je ne suis pas fan de la multiplicité des .ini Je mettrais plutôt un fichier ini avec des balises pour les sous menu, mais c'est ma façon de faire et ma vision des choses.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: xmenu: menu paramétrable dynamiquement   Mer 17 Avr 2013 - 0:26

As-tu remarqué l'utilisation de la fonction KGFDelimitedTextExtract() pour extraire les éléments de la chaîne CSV ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: xmenu: menu paramétrable dynamiquement   Mer 17 Avr 2013 - 9: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 Wink )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: xmenu: menu paramétrable dynamiquement   

Revenir en haut Aller en bas
 
xmenu: menu paramétrable dynamiquement
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Administration] Annuaire des membres paramétrable et imprimable
» [C#]Créer des widgets dynamiquement
» commande menu "Enregistrer"
» [Résolu] Paramétrer historique de navigation
» [resolu]mettre fichier dans le menu bar

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Vos sources, vos utilitaires à partager-
Sauter vers: