Retour au sommaire

SourceServer
ForumServer

DesignServer

Accueil CanalOpenSource


Liens :

www.pmarty.com
www.4D.fr
www.fyi.4D.fr
www.ajar.ch
www.4DToday.com

 

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