|
Barres de menus
La gestion des menus dans xShell2002 est particulière.
Cette gestion repose sur une construction dynamique des menus et non pas
sur l'éditeur de menus traditionnel offert en mode structure.

Inside
Dans l'éditeur de menus de 4D, en mode structure, vous constatez
qu'il existe 6 barres au total. Hormis la barre 6, les autres barres n'ont
pas de ligne de menu mais seulement leur titre.
Chaque titre de ces menus est issue d'une valeur contenue en ressource.
Vous pouvez acceder à ces ressources avec l'éditeur de ressources
STR# de xShell2002 (menu Spécial > Editeur de ressources STR#).
Les ressources sont contenues dans le fichier de ressources de la base.
Si vous l'ouvrez, vous verrez qu'il existe une ressource n° 30503
dans laquelle vous retrouvez les libellés des menus. Ceux sont
des libellés en Français.
La ressource s'appelle FrenchDefault, vous pouvez changer ce nom à
votre convenance. Vous pouvez aussi renommer les menus comme il vous convient.
J'ai choisi des noms génériques et j'essaye de m'en tenir
à cet espace là.
Les ressources 30504 et 30505 sont les ressources de localisation en Anglais
et en Espagnol. Ces deux ressources ne sont pas complètes, les
libellés n'ont pas été traduits entièrement.
Par défaut, xShell2002 charge la ressource 30503. Il affecte pour
cela la variable <>mnu_vlResID. Cette affectation se fait dans la
méthode OnStartup,
puis est modifiée selon la langue de l'utilisateur dans str_SetResIDLanguage
qui est appelée automatiquement par la méthode OnStartupProcess.
Cette dernière méthode initialise les nouveaux process dans
xShell2002.
Les numéros des barres de menus peuvent changer dans 4D, cela se
passe lorsque vous intégrez xShell2002 dans une base existante
qui possède déjà ses menus. Le fichier MenusBar.TXT
qui se trouve dans le dossier properties contient plusieurs paramètres
utilisés par l'éditeur de menus. En particulier les numéros
des barres de menus
Ouvrez ce fichier pour en comprendre le contenu.
C'est un fichier créé par l'éditeur de propriétés.
Il contient plusieurs sections, chaque section est nommée et ce
nom est encadré par des crochets ( [ ] ) . La fin de la section
est signalée par [End]. La première section s'appelle [Header].
C'est l'en tête du fichier.
Dans cet en tête, la partie suivante
NameSection1=File
NameSection2=File Special
NameSection3=File Tools Special
NameSection4=File Space Tools Special
NameSection5=File Environment Space Tools Special
se rapporte aux sections qui définissent les barres de menus.
Juste en dessous, la ligne "DialogBar=6" donne le numéro
de la barre utilisée de manière standard pour les dialogues.
C'est la seule barre de menu à contenir une ligne dans le menu
Fichier.
Dans chacune des sections la propriété Num4DBar indique
le numéro de la barre 4D. C'est ce numéro qu'il faut changer
si vous déplacez les barres de xShell2002 dans une base existante.
La propriété nbMenus indique le nombre de menus de la barre.
Il est possible d'avoir cette information par programmation, mais dans
notre cas, c'est une information qui est stockée en propriété
et qu'il faudra modifier si vous ajoutez un menu à une barre gérée
par xShell2002. Ce nombre ne tient pas compte du menu Fenêtre qui
est indépendant des autres menus dans sa construction.
Selon le nombre de menus, le nombre de propriétés MenuName
et MenuCaptionRes varient. Chacune de ces propriétés est
concaténée avec le numéro du menu. Ainsi, le menu
Fichier a une propriété MenuName1=File et une propriété
MenuCaptionRes1=1.
La propriété MenuName indique le nom du menu. Cette propriété
est exploitée dans les fichiers créés par l'éditeur
de menus.
La propriété MenuCaptionRes indique la ligne de la ressource
STR# qui contient le libellé du menu. Si la barre de menus définie
en structure exploite directement la ressource, l'éditeur, lui,
y fait référence par l'intermédiaire de cette propriété
et l'utilise pour construire l'onglet des menus.
Mais que faut-il faire si on désire changer le nom d'un menu, comme
par exemple Environnement en Communication?
Il suffit de changer le libellé en ressource.
Il n'est pas possible sans l'aide d'un plug-in de changer le titre d'un
menu. J'ai donc opté pour l'instant pour des noms qui sont généraux.
L'éditeur de menus par contre permet de créer autant de
barres de menus sur la base de ce modèle et d'avoir dynamiquement
autant de lignes différentes que l'on veut.
Les Menus que vous allez créer avec l'éditeur de menus sont
stockés sous forme de fichier texte dans le dossier Menus qui se
trouve dans le dossier properties.
Chaque nouvelle barre de menus utilise le fichier MenuTmpl.TXT comme modèle.
Il est possible de remplacer ce modèle par une barre créé,
stockée dans le dossier Menus, déplacée dans le dossier
properties et renommée pour remplacer MenuTmpl.TXT.
Les définitions des barres de menus contiennent beaucoup d'informations
et deviennent rapidement illisibles sans l'aide de l'éditeur. Voici
la base de la structure du fichier de propriétés d'une barre
de menus:
Dans l'en tête (section [Header] ) la propriété Inherit
indique de quel type de barre on hérite. La propriété
se rapporte au fichier MenusBar.TXT.
A la suite de cette première section, il y a deux types de sections,
celles des menus et celles des lignes de menus. Chaque section en rapport
avec un menu porte le nom du menu entre crochets comme le menu [File]
pour Fichier. Et cette section contient le nom des lignes de menus.
La section d'une ligne de menu a pour nom le nom de la ligne et contient
comme propriétés la localisation en Français, Anglais
et Espagnol:
FrenchCaption=Quitter
EnglishCaption=Quit
SpanishCaption=Salir
puis l'équivalent clavier:
ShortCut=/Q
la coche de la ligne:
Marked=
La méthode à executer:
Execute=Quit4D_
L'autorisation pour voir la ligne:
ShowOnAuthorization=
L'utilisateur pour voir la ligne:
ShowOnUser=
L'inactivation de la ligne:
Inactive=
Une ligne séparatrice:
FollowedByLine=
Ces fichiers sont manipulés par les méthodes de la librairie
mnu_ qui utilisent la librairie prp_. Vous ne devez pas avoir deux lignes
de menus ayant le même nom. Ce serait les propriétés
de la première ligne qui seraient à chaque fois exploitées.
Lors d'une prochaine évolution de cette librairie, l'exploitation
d'un plug-in sera intégré pour normaliser le fonctionnement
de cette librairie et augmenter sa portée.

Retour | Haut
de page
|