[Resolu]: Menu contextuel Dynamique...

Posté par Deedier le 30/8/2004 11:17:27
ça y est ça marche !!!
Pour ceux que ça intérressent, le principe est celui expliqué par Benj1808 !! (Merci à toi !)

J'utilise une variable chaine qui stocke les fichiers que j'ouvre. Donc dans une procédure 'Pr_OuvreFichier', à la fin, j'ajoute le nom du fichier (Chemin complet) à ma liste, qui est de la forme "Fic1 + RC + Fic2 + RC + ... + RC + FicN". La structure de la liste n'est pas choisi au hasard, c'est le résultat d'un IniLit("HISTO","","",NomFicIni). Cette fonction permet de lister toutes les clefs de la section "HISTO" de mon fichier INI.

A l'ouverture de mon application, je charge la liste grace à IniLit, et j'effectue la procédure suivante :

Pr_ChargeHisto()
i est un entier = 1
//La liste est de la forme : Fic1 + rc + Fic2 + rc + fic3 + rc + ... + rc + ficN
//ListeFic déclarée en globale et chargée dans l'ouverture du projet...

FicN est une chaîne = ExtraitChaîne(ListeFic, i, RC)
TANTQUE FicN <> EOT ET i < 11 ET FicN <> ""
_Menu.Fichier.Option8..Visible = Vrai //C'est un séparateur...
{"_menu.Fichier.Fichier" + i}..Libellé = FicN
{"_menu.Fichier.Fichier" + i}..Visible = Vrai
i++
FicN = ExtraitChaîne(ListeFic, i, RC)
FIN
//Fin

Ma fenêtre mere contient 10 emplacement libres notées _Menu.Fichier.Fichier1 à _Menu.Fichier.Fichier10

Le code de chaque options est ma procédure d'ouverture de fichier et s'appel comme suit :

Selection du menu de _Menu.Fichier.Fichier1
Pr_OuvreFichier(MoiMeme..Libellé)

//Voila ...
En prenant soins de cacher les 10 options au début du chargement, ça marche !!!
Rq : Lorsque vous ajoutez un fichier dans la liste, procédez comme suit :

PR_AjouteHisto(NomFic est une chaîne)

//ListeFic est toujours la liste des fichiers séparé par des RC
//Recherche si le fichier n'est pas déjà dans la liste
SI ChaîneOccurrence(ListeFic,NomFic,SansCasse) = 0 ALORS
//Dans ce cas on l'ajoute.
ListeFic = NomFic + RC + ListeFic
FIN

Reste à sauver la liste dans le fichier Init, à la fermeture du projet :

IdFic est un entier = fOuvre(FicInit,foAjout)
i est un entier = 1

SI IdFic = -1 ALORS
Erreur("Probleme ecriture dans le fichier " + FicInit)
RETOUR
FIN

//Histo :
Fic est une chaîne = ExtraitChaîne(ListeFic,i,RC)
fEcritLigne(IdFic,"[HISTO]")
TANTQUE i < 11 ET Fic <> EOT ET Fic <> ""
fEcritLigne(IdFic,Fic + "=")
i++
Fic = ExtraitChaîne(ListeFic,i,RC)
FIN

fFerme(IdFic)

//Je n'utilise pas IniEcrit, elle n'est pas adaptée ici.


PS : Je poste ici, une partie de mon code, chez moi ça marche, mais il manque certainement qques petites choses pour que cela fonctionne chez vous. Reprennez les grandes lignes, mais ne faite pas de copier coller, ça marchera pas ! Mettez le code à votre sauce !!

@+ !!

Pour ceux qui n'ont rien compris à cause de mes explications trop téléphonées, je reste à disposition et je pense pouvoir fournir un exemple à R&B asap... voila !

Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=12&topic_id=1242&post_id=5062