TMainMenu/fr: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: TMainMenu/fr
| Old | New | Line | |
|---|---|---|---|
| 1 | + | Un **TMainMenu**  est un composant non visuel de l'[[Standard tab/fr|onglet Standard]] de la [[Component Palette/fr|palette de composants]] quii fournit un menu principal à une fiche. | |
| 2 | + | ||
| 3 | + | # Description | |
| 4 | + | ||
| 5 | + | Le menu principal apparaît tout au dessus des fenêtres que le concepteur de fiche peut personnaliser en choisissant divers articles de menu. | |
| 6 | + | ||
| 7 | + | Pour voir l'éditeur de menu, cliquez droit sur l'icône du menu principal de votre fiche. | |
| 8 | + | ||
| 9 | + | # Conventions | |
| 10 | + | ||
| 11 | + | Il est courant de nommer les objets menus avec le préfixe *mnu* ou *menu* et le nom du menu. Les sous-menus prolongent ceci en préfixant avec le menu dans lequel ils sont visibles p.ex. le sous-menu *Couper* dans le menu *Edition* est généralement appelé *mnuEditCut* ou *menuEditCut*. C'est mnémonique et facile à retenir, si six mois vous devez apportez une modification, vous saurez où la porter. Remarquez que cela est une *convention*, non une obligation, mais cela rendra sans doute plus aisée les modifications à venir ou le compréhension si vous devez relire le code bien plus tard. Ceci est aussi valable pour une autre personne qui devrait assurer la maintenance du programme que vous avez écrit. | |
| 12 | + | ||
| 13 | + | Commençons donc. | |
| 14 | + | ||
| 15 | + | # Création de menu | |
| 16 | + | ||
| 17 | + | 1. Sélectionnez TMainMenu depuis la palette des composants et placez el composant sur votre fiche en cliquant sur le composant TMainMenu, puis sur la fiche, le composant apparaît sous la forme d'un carré avec la représentation d'un menu surgissant (*drop-down*) et le nom en dessous qui est par défaut *MainMenu1*. | |
| 18 | + | 2. Si vous n'aimez pas le nom **MainMenu1**, modifiez la propriété *Name* dans l'inspecteur d'objet en quelque chose de plus approprié. Changeons-le en *XMenu*. Tapez *XMenu*. dans la zone à droite de la propriété *Name* et pressez Entrée. Le nom du composant change. | |
| 19 | + | 3. Cliquez droit sur XMenu, un menu popup apparaîtra. Pour l'instant, ce que nous voulons est la première option, **Editeur de menu**. Cliquez dessus. | |
| 20 | + | 4. L'éditeur de menu s'ouvrira avec un article de menu déjà créé avec un intitulé "New Item1". Ce sera un article de menu de niveau supérieur, similaire au menus "File Edit View Help" que vous avez déjà pu voir avant. Vous voulez probablement le modifier, cliquez donc dessus et allez sur l'inspecteur d'objet. | |
| 21 | + | 5. Dans l'inspecteur d'objet, modifiez la propriété *Name* de *MenuItem1* en quelque chose de plus parlant. Par exemple prenez **mnuFile** et tapez Entrée. | |
| 22 | + | 6. Nous voulons un meilleur intitulé que New Item1, allons donc vers la propriété Caption et tapons **&File** et pressons <span class="kbd">Enter</span>. L'esperluette (*ampersand*) **&** devant le nom est un *accélérateur*, qui vous permet d'ouvrir le menu en pressant <span class="kbd">Alt</span> + la lettre soulignée. L'intitulé du menu devient **<u>F</u>ile**. C'est à partir de ce point que vous créez des menus de niveau supérieur supplémentaires. | |
| 23 | + | 7. Allez sur la fenêtre de l'éditeur de menu. Cliquez sur <u>F</u>ile, ensuite cliquez-droit sur lui. Un menu popup apparaîtra. Cliquez sur *Insérer un nouvel article après* et un nouveau menu appelé *New item2* apparaîtra. comme expliqué pour les deux derniers articles de menu, changez son nom en **mnuHelp** et son intitulé en **&Help** dans l'inspecteur d'objet. | |
| 24 | + | 8. Faisons un article de menu sous <u>F</u>ile. Cliquez-droit sur lui puis cliquez sur **Créer un sous-menu**. Le menu Fichier a une flèche sur lui et un sous-menu appelé *New Item2* apparaît. | |
| 25 | + | 9. Modifiez-le en quelque en rapport avec ce qu'il fait, disons *Open*. Allez sur l'inspecteur d'objet, modifiez la propriété Name en **mnuFileOpen**, puis l'intitulé en **&Open**. | |
| 26 | + | 10. Nous avons besoin d'un autre article de menu de niveau supérieur entre **<u>F</u>ile** et **<u>H</u>elp**. Vous pouvez soit cliquer-droit sur **<u>F</u>ile** puis sur **Insérer un nouvel article (après)** soit cliquer sur **<u>H</u>elp** puis sur **Insérer un nouvel article (avant)**. | |
| 27 | + | 11. Changez la propriété Name de cet article de menu en **mnuEdit** dans l'inspecteur d'objet ainsi que sa propriété Caption en **&Edit**. | |
| 28 | + | 12. Continuez ainsi pour toutes les entrées de menu dont vous avez besoin | |
| 29 | + | ||
| 30 | + | Maintenant vous avez obtenu un menu qui s'affiche à l'exécution et permet à l'utilisateur de cliquer dans les menus. Cela ne fera absolument rien. Pour que cela fasse quelque chose, vous devez ajouter des [[Event order/fr|gestionnaire d'événements]] pour chaque menu ou sous-menu qui réagiront lors du clic. Généralement, le menu de niveau supérieur ne réagissent pas, les sous-menu si. Vous avez deux choix sur la manière dont un menu réagit ; vous pouvez insérer des gestionnaires d'événement dans le menu ou vous pouvez utiliser un composant [[TActionList/fr|TActionList]]. La principale raison pour laquelle utiliser un TActionList est que si vous définissez des opération dans le menu vous pourrez aussi en bénéficier dans une barre d'outils avec les boutons correspondants aux entrées de menu. Plutôt qu'écrire deux routines pour gérer les fonctions **New** et **Open**, vous pouvez utiliser un TActionList pour le menu et la barre d'outils à la fois. Faire cela sera expliqué ici. Pendant ce temps, j'expliquerai comment gérer un menu pour cliquer en utilisant un événement dans l'Explorateur d'objets. | |
| 31 | + | ||
| 32 | + | # Faire que le menu courant fasse quelque chose | |
| 33 | + | ||
| 34 | + | 1. Revenez à la fenêtre de l'éditeur de menu, cliquez sur le sous-menu **<u>O</u>pen** sous **<u>F</u>ile**. Allez à l'inspecteur d'objet, cliquez sur l'onglet **Evénements**. Le seul événement que vous avez réellement besoin de changer est OnClick, lequel est blanc. Si vous aviez un gestionnaire d'événement existant, vous pourrez l'utiliser mais comme vous ne le pouvez pas, vous pouvez demander à Lazarus de le créer pour vous. Sur la droite se trouve un bouton avec trois points. Cliquez dessus et une nouvelle procédure est créée dans votre code et la vue passe dans l'éditeur de code. Cela ressemblera à cela : | |
| 35 | + | ||
| 36 | + | ``` pascal | |
| 37 | + | procedure TfrmMain.mnuFileOpenClick(Sender: TObject); | |
| 38 | + | begin | |
| 39 | + | ||
| 40 | + | end; | |
| 41 | + | ``` | |
| 42 | + | ||
| 43 | + | 1. enre les instructions `begin` et le `end`, vous pouvez écrire le code pour gérer l'Opération Ouvrir du menu. Cela peut inclure de placer un contrôle *TOpenDialog* depuis l'onglet Dialogs sur votre fiche et de manipuler cette boîte de dialogue pour créer le dialogue standard *Ouvrir*. La même chose s'applique si vous avez un sous-menu **<u>S</u>ave** ou **Save <u>a</u>s**. | |
| 44 | + | 2. Vous répétez ce qui précède au point où j'ai mentionné comment commencer à créer des menus et des sous-menus supplémentaires, et pour chacun sur lequel l'utilisateur peut cliquer, vous devez créer des gestionnaires pour chaque option de menu au besoin. | |
| 45 | + | ||
| 46 | + | # Menu avec case à cocher | |
| 47 | + | ||
| 48 | + | Maintenant, vous voulez peut-être seulement une case à cocher, qui quand l'utilisateur clique dessus, bascule une coche. Voyons comment faire cela. | |
| 49 | + | ||
| 50 | + | 1. Allez sur l'éditeur de menu, cliquez sur **<u>E</u>dit** | |
| 51 | + | 2. Faites un article de menu sous <u>E</u>dit. Cliquez-droit dessus, ^puis cliquez sur **Créer un sous-menu**. Allez dans l'inspecteur d'objet, cliquez sur l'onglet **Propriétés** s'il n'est pas déjà sélectionné. Nommez-le **mnuEditPreserve** (propriété *Name*) et intitulez-le **P&reserve case** (propriété *Caption*), l'accélérateur est la lettre R précédé par une esperluette (*ampersand*), vous pouvez donc taper sur <span class="kbd">Alt</span> + <span class="kbd">C</span>. | |
| 52 | + | 3. Sélectionnez l'onglet **Evénements**, choisissez la propriété **OnClick** et cliquez sur le bouton ... correspondant. | |
| 53 | + | 4. Lazarus basculera dans la fenêtre de l'éditeur de code et créera le gestionnaire d'événement OnClick pour ce sous-menu. | |
| 54 | + | 5. entre les instructions **begin** et **end**, une seule ligne suffit comme suit : | |
| 55 | + | ||
| 56 | + | ``` pascal | |
| 57 | + | mnuEditPreserve.checked := not mnuEditPreserve.checked ; | |
| 58 | + | ``` | |
| 59 | + | ||
| 60 | + | 1. Cela basculera la valeur de cochée à non cochée. Pour pouvoir l'utiliser, faites juste référence à la propriété **`mnuEditPreserve.checked`** (ou quelque soit le nom du menu, avec la propriété 'Checked''). Elle est utilisée comme toute autre valeur [[Boolean/fr|booléenne]]. | |
| 61 | + | ||
| 62 | + | # Séparateurs | |
| 63 | + | ||
| 64 | + | Parfois, vous voulez un menu qui a une ligne séparant des entrées. Par exemple, un menu **<u>E</u>dit** pourrait avoir des sous-menus pour **Cut**, **Copy** et **Paste**, puis avoir une ligne de séparation avant le prochain sous-menu. Pour créer une telle ligne de séparation, ajoutez seulement un sous-menu et affectez à la propriété Caption le tiret simple (-). | |
| 65 | + | ||
| 66 | + | # Raccourcis | |
| 67 | + | ||
| 68 | + | Si vous le désirez, vous pouvez affecter à un menu une combinaison spécifique de touches, faites comme suit : | |
| 69 | + | ||
| 70 | + | - Sélectionnez le menu dans l'éditeur de menu, qui sera muni du raccourci clavier. | |
| 71 | + | - Dans l'inspecteur d'objet, allez dans la propriété *ShortCut* et cliquez sur le bouton \[...\]. | |
| 72 | + | - Il apparaîtra une fenêtre où vous pourrez sélectionner le raccourci voulu pour votre menu. | |
| 73 | + | - A l'exécution, le gestionnaire d'événement OnClick de votre menu est appelé avec ce raccourci, comme si vous aviez cliqué sur le menu. | |
| 74 | + | ||
| 75 | + | # Image en avant d'un menu | |
| 76 | + | ||
| 77 | + | If you want to make your menu more visually appealing or establish an optical mapping of the menu entries to a possible toolbar, you can show images in front of the menus. The following steps are necessary: | |
| 78 | + | ||
| 79 | + | - Add a [[TImageList]] to your [[TForm|form]]. This is found on the component palette *Common Controls*. Choose that component TImageList and click on your Form. Now the ImageList named *ImageList1* on the form was created. These ImageList will contain all symbols or images to be displayed before the menus. | |
| 80 | + | - Right click now on the *ImageList1* and open you the **ImageList Editor**. | |
| 81 | + | - Add all the images, one after the other, you need for your menus, to the ImageList. Simply click the button *Add* and select as usual an appropriate image. | |
| 82 | + | - When you have added all of the required images in the ImageList, you confirm your selection with \[OK\] button and the ImageList Editor is closed. | |
| 83 | + | - Now, you have to select your MainMenu, and set the property *Images* in the Object Inspector to your ImageList. Simply select your ImageList *ImageList1* in the adjacent combobox. | |
| 84 | + | - Now open the menu editor of your menu again and select the menu that you want to get a image. | |
| 85 | + | - Go in the Object Inspector to the property *ImageIndex* from your menu and select the image to display in the adjacent combobox. | |
| 86 | + | - In the Menu Editor, select the next menu and choose the corresponding image for it. And so on. | |
| 87 | + | ||
| 88 | + | # Problème : Sous-menus surgissant à gauche (Windows Vista, 7 and 10) | |
| 89 | + | ||
| 90 | + | Si vous voyez le menu déroulant aligné à droite de votre élément de menu principal, et qu'un sous-menu s'ouvre vers la gauche, c'est parce que votre Windows est réglé sur **Droitier** dans *'Paramètres du Tablet PC* '. Ceci est fait pour l'utilisation d'une tablette et l'écriture/l'appui sur l'écran, les menus sont directement visibles. Si vous êtes droitier, vous voudrez les menus à gauche pour qu'ils ne soient pas sous votre main. Pour les opérations PC normaux, cela est réglé sur les gauchers par défaut. | |
| 91 | + | ||
| 92 | + | Vous pouvez contrôler ceci en faisant ce qui suit : | |
| 93 | + | ||
| 94 | + | - Pressez sur al touche <span class="kbd">Win</span> + <span class="kbd">R</span>. | |
| 95 | + | - Collez dedans **shell:::{80F3F1D5-FECA-45F3-BC32-752C152E456E}** et pressez <span class="kbd">Enter</span>. | |
| 96 | + | - Aller dans l'onglet **Autre** | |
| 97 | + | - Par défaut , ce devrait être **Gaucher** pour que les menus apparaissent sur la droite sinon ils apparaissent sur la gauche. | |
| 98 | + | - Remarque : La flèche d'un sous-menu apparaîtra toujours à droite du menu quel que soit ce paramètre. | |
| 99 | + | ||
| 100 | + | # Voir aussi | |
| 101 | + | ||
| 102 | + | - [[doc:lcl/menus/tmainmenu.html|Doc. TMainMenu]] | |
| 103 | + | - [[TPopupMenu/fr|TPopupMenu]] | |
| 104 | + | - [[TActionList/fr|TActionList]] | |
| 105 | + | ||
| 106 | + | --- | |
| 107 | + | *From the Free Pascal wiki, page "TMainMenu/fr", as it stood on 2020-03-01 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
