[Basic] Barre de menus : ajout, suppression

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur: Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.

[Basic] Barre de menus : ajout, suppression

Messagepar Alain de La Chaume » 08 Juin 2009 17:23

Bonjour à tous.
Comme j'ai un peu galéré pour trouver comment ajouter/supprimer un menu de la barre du même nom, je mets à dispo ce que j'ai enfin pu faire, me disant que ça pourrait peut-être intéresser quelqu'un.
Pièces jointes
menu_Creer_V4.odt
(19.88 Kio) Téléchargé 1437 fois
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
 
Message(s) : 1527
Inscrit le : 28 Sep 2008 13:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Basic] Barre de menus : ajout, suppression

Messagepar jjk » 08 Juin 2009 22:00

Et comment que ça va nous intéresser !!
Merci en tout cas.
OpenOffice 3.1.1 sous XP-SP2 et LibreOffice 3.5.0 sous Win 7
jjk
HédOOniste
HédOOniste
 
Message(s) : 1696
Inscrit le : 27 Oct 2008 15:30

Re: [Basic] Barre de menus : ajout, suppression

Messagepar A_math » 09 Juin 2009 12:19

Merci,

Je ne sais pas quand ni pourquoi faire exactement mais je me doute que cela me servira un jour. :super:
Alain

3.0.1 portable sous XP SP3 (boulot) et 3.0.0 sous Mandriva 2009.0
Avatar de l’utilisateur
A_math
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 82
Inscrit le : 13 Jan 2008 00:38

Re: [Basic] Barre de menus : ajout, suppression

Messagepar ThierryF » 22 Juin 2011 13:24

Bonjour,

J'ai lancé ton fichier --> menu_Creer_V4.odt
et mes menus on disparus.

Il semblerait donc que la barre initiale soit affectée.
Après une vérif supplémentaire, il faut que toutes les fenêtres OOo soit fermées.
Dans mon cas, j'avais laissé Calc ouvert et en rouvrant Writer la barre de menu n'était pas réinitialisée.

Tout cela pour te remercier pour ce code.
:super: grand merci Alain
et de plus tu habites dans un lieu que j'affectionne énormément.
Thierry
Dom : OOo 3.3 & LibO 3.4.1 sous Win 7
Bur : OOo 3.3 sous Win XP
ThierryF
Membre lOOyal
Membre lOOyal
 
Message(s) : 27
Inscrit le : 09 Juin 2011 13:36

Re: [Basic] Barre de menus : ajout, suppression

Messagepar Alain de La Chaume » 22 Juin 2011 21:50

Bonjour.. soir,

Ouf ! J'ai cru qu'il s'agissait d'une réclamation... :P
Merci donc à vous aussi (coucou Léa) d'encourager les petits participants libres
à un projet libre... ... et gratuit en plus. :wink:

Bien cordialement, Alain
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
 
Message(s) : 1527
Inscrit le : 28 Sep 2008 13:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Basic] Barre de menus : ajout, suppression

Messagepar Dude » 13 Sep 2011 20:07

Autre méthode pour la création d'un menu à plusieurs niveaux :
Image
MenuDynamique.odt
(13.4 Kio) Téléchargé 752 fois
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20802
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Basic] Barre de menus : ajout, suppression

Messagepar ThierryT » 28 Déc 2015 18:48

Bonsoir,

Pour répondre au besoin de remettre tous les menus dans les fichiers ouverts, je vous joins le code suivant où il faut appeler la fonction DocumentsOuverts qui scrute l'ensemble des documents ouverts dans l'application LO ou AOO:

Code : Tout sélectionner   AgrandirRéduire
'---------------------------------------------------------------------
sub menusRestaurer(nomModule as string)
    dim sMenuBar as string
    dim oConfMgr, oConfModule, oDefSet

   sMenuBar = "private:resource/menubar/menubar"
       
   oConfMgr = createUnoService(_
             "com.sun.star.ui.ModuleUIConfigurationManagerSupplier")
   oConfModule = oConfMgr.getUIConfigurationManager(nomModule)
   oDefSet = oConfModule.getDefaultSettings(sMenuBar)
   oConfModule.replaceSettings(sMenuBar, oDefSet)
   end sub
'---------------------------------------------------------------------

Sub DocumentsOuverts()
   'pensez à sauvegarder vos documents
   dim lesDocs, laCollection, leDoc

   on error resume next
   lesDocs = StarDesktop.Components
   laCollection = lesDocs.createEnumeration
   while laCollection.hasMoreElements
      leDoc = laCollection.nextElement
      ' Reconnaître les types de documents ouverts
      ' -> restaurer les menus dans les applications de LO ou AOO
      menusRestaurer (leDoc.Identifier)
   wend
End Sub
LibreOffice 6.1.3.2 x64 / AOO 4.1.5 (x86) sous Windows 8.1 (x64)
Java 8.x (x64 et x86), Firefox, Thunderbird,....

“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu
Avatar de l’utilisateur
ThierryT
Membre enthOOusiaste
Membre enthOOusiaste
 
Message(s) : 467
Inscrit le : 10 Nov 2012 18:05

Re: [Basic] Barre de menus : ajout, suppression

Messagepar ThierryT » 18 Avr 2016 18:10

La version que propose Alain de Chaume (Menu_Créer_V4) crée bien les menus souhaités MAIS pour l'ensemble des fichiers ouverts dans LO pour le module concerné (ici Writer).

:alerte: Une fois le fichier Menu_Créer_V4 fermé, les menus créées dans les autres fichiers ouverts RESTENT affichées et leurs utilisations génèrent une erreur d'exception. Normal, les fichiers ouverts ne possèdent pas les macros appelées par les menus car elles sont seulement dans le fichier Menu_Créer_V4. :alerte:

Pour affecter seulement l'ajout au fichier en cours, il suffit de remplacer dans la routine acMenuCreer, le code
Code : Tout sélectionner   AgrandirRéduire
   oFrame.layoutManager.getElement(_
         "private:resource/menubar/menubar").setSettings(oSettings)


par
Code : Tout sélectionner   AgrandirRéduire
   ' Création et implantation réel dans la barre de menu du fichier SEUL!!!
   oModelUIManager = oFrame.getController().getModel().getUIConfigurationManager()
   oModelUIManager.insertSettings("private:resource/menubar/menubar", oSettings)
LibreOffice 6.1.3.2 x64 / AOO 4.1.5 (x86) sous Windows 8.1 (x64)
Java 8.x (x64 et x86), Firefox, Thunderbird,....

“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu
Avatar de l’utilisateur
ThierryT
Membre enthOOusiaste
Membre enthOOusiaste
 
Message(s) : 467
Inscrit le : 10 Nov 2012 18:05

Re: [Basic] Barre de menus : ajout, suppression

Messagepar Alain de La Chaume » 20 Avr 2016 09:20

Bonjour à tous...

... et merci à ThierryT pour son ajout afin que seul le fichier en cours soit impacté.
Pour ce qui est de son :alerte: commentaire en alerte rouge :alerte: :D
je tiens tout de même à préciser que les macros fournies le sont le plus souvent
dans des fichiers, par commodité, et que c'est aux éventuels utilisateurs de les placer
là où il convient de le faire. Dans ce cas : Mes macros et boîtes de dialogue ...
Voir la note de Papayes à ce propos : Importer une macro d'un fichier exemple ; lanceurs

Bien coOordialement, Alain.
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
 
Message(s) : 1527
Inscrit le : 28 Sep 2008 13:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Basic] Barre de menus : ajout, suppression

Messagepar ThierryT » 21 Juin 2016 17:01

Bonjour,

Une suite sur les ajouts de menu et plus précisément maintenant la gestion de ceux-ci : menu disponible (non grisé) ou non disponible (grisé).

ATTENTION : cette gestion ne fonctionne que sous LibreOffice pas sous OpenOffice car la gestion des menus sous cette dernière est différente.

Fonctionnement :
Dans le fichier joint, nous avons un menu "Test" ajouté juste avant le menu "Aide".
Ce menu contient un "sous-Menu" de 4 "Items" dont le troisième contient aussi un "sous-Menu" de trois "Items". C'est ce troisième "Item" du sous-Menu (Test33) que nous souhaitons gérer ici.
L'appui sur le bouton "Activer l'intercepteur" permet de visualiser l'ensemble des événements de Menus appelées via le DispatchHelper.
Faire afficher le sous-Menus de l'Item "test3" et voyer la modification de l'Item Test33.
Si vous désactiver l'intercepteur, l'Item "Test33" gardera l'état précédent.
LibreOffice 6.1.3.2 x64 / AOO 4.1.5 (x86) sous Windows 8.1 (x64)
Java 8.x (x64 et x86), Firefox, Thunderbird,....

“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu
Avatar de l’utilisateur
ThierryT
Membre enthOOusiaste
Membre enthOOusiaste
 
Message(s) : 467
Inscrit le : 10 Nov 2012 18:05

Re: [Basic] Barre de menus : ajout, suppression

Messagepar Hubert Lambert » 07 Avr 2019 18:21

Bonjour,

Indirectement inspiré de ce fil, je vous propose ci-dessous une autre manière d'ajouter dynamiquement un élément à la barre de menu.
Le code illustre comment :
- créer l'élément de menu, avec éventuellement une indication des raccourcis clavier;
- ajouter un listener pour être informé d'une action sur le menu;
- intercepter les raccourcis clavier.
Le menu est ajouté au document en cours et n'est pas mémorisé à la fermeture.
Cordialement.

Code : Tout sélectionner   AgrandirRéduire
sub main(event)
    styles = com.sun.star.awt.MenuItemStyle
    check = styles.CHECKABLE + styles.AUTOCHECK
    radio = styles.RADIOCHECK + styles.AUTOCHECK
    normal = 0

    items = array("Un ~menu", array(_
                  array("item", "Item ~normal", normal, "clic1", array(4, 525)),_
                  array("item", "Item à cocher", check, "coche1"),_
                  array("menu", "Sous-menu un", array(_
                        array("item", "Item bouton radio 1", radio, "radio1"),_
                        array("item", "Item bouton radio 2", radio, "radio2"))),_
                  array("sep"),_
                  array("item", "I~tem normal", normal, "clic2", array(4, 531)),_
                  array("menu", "Sous-menu deux", array(_
                        array("item", "Item", normal, "clic3"),_
                        array("item", "Autre item", normal, "clic4"),_
                        array("sep"),_
                        array("menu", "Sous-sous-menu", array(_
                              array("item", "Item", normal, "clic5"),_
                              array("item", "Dernier item", normal, "clic6")))))
    doc = thiscomponent
    menuid = 999
    res = creemenu(doc, items, meunid)
    if res then
        creeraccourcis(doc)
        event.Source.setEnable(False)
        event.Source.setVisible(False)
    end if
end sub

function creemenu(doc, items, menuid)
    titremenu = items(0)
    maquetteur = doc.CurrentController.Frame.LayoutManager
    barremenu = maquetteur.getElement("private:resource/menubar/menubar").XMenuBar
    if barremenu.getItemPos(menuid) > -1 then
        'msgbox "Le menu existe déjà !"
        creemenu = 0
        exit function
    end if
    barremenu.insertItem(menuid, titremenu, 0, barremenu.ItemCount)
    menulistener = createUnoListener("xmenu_", "com.sun.star.awt.XMenuListener")
    menupopup = creemenupopup(items(1), menuid+1, menulistener)
    barremenu.setPopupMenu(menuid, menupopup)
    creemenu = 1
end function

function creemenupopup(elements, byval id, listener)
    popup = createUnoService("com.sun.star.awt.PopupMenu")
    popup.addMenuListener(listener)
    'popup = createUnoService("stardiv.Toolkit.VCLXPopupMenu")
    for each element in elements
        select case element(0)
        case "item"
            popup.insertItem(id, element(1), element(2), popup.ItemCount)
            if ubound(element) > 2 then
                popup.setCommand(id, element(3))
            end if
            if ubound(element) > 3 then
                popup.setAcceleratorKeyEvent(id, cree_keyevent(element(4)))
            end if
            id = id+1
        case "menu"
            popup.insertItem(id, element(1), 0, popup.ItemCount)
            souspopup = creemenupopup(element(2), id, listener)
            popup.setPopupMenu(id, souspopup)
            id = id+1
        case "sep"
            popup.insertSeparator(popup.ItemCount)
        end select
    next
    creemenupopup = popup
end function

function cree_keyevent(keyinfos)
    dim cle as new com.sun.star.awt.KeyEvent
    cle.Modifiers = keyinfos(0)
    cle.KeyCode = keyinfos(1)
    cree_keyevent = cle
end function

sub creeraccourcis(doc)
    keyhandler = createUnoListener("xkey_", "com.sun.star.awt.XKeyHandler")
    doc.CurrentController.addKeyHandler(keyhandler)
end sub

REM XMenuListener
sub xmenu_itemSelected(menuevent)
    menuid = menuevent.MenuId
    source = menuevent.Source
    etiquette = source.getItemText(menuid)
    commande = source.getCommand(menuid)
    if instr(commande, "coche") = 1 then
        if source.isItemChecked(menuid) then
            msgbox "L'élément <" & etiquette & "> a été coché."
        else
            msgbox "L'élément <" & etiquette & "> a été décoché."
        end if
    elseif instr(commande, "radio") = 1 then
        msgbox "L'élément <" & etiquette & "> a été sélectionné."
    else
        msgbox "L'élément <" & etiquette & "> a été sélectionné." & string(2, chr(10)) & "Commande : """ & commande & """"
    end if
end sub

sub xmenu_itemHighlighted(menuevent)
end sub

sub xmenu_itemActivated(menuevent)
end sub

sub xmenu_itemDeactivated(menuevent)
end sub

sub xmenu_disposing(source)
end sub

REM XKeyHandler
sub xkey_disposing(source)
end sub

function xkey_keyPressed(keyevent)
    xkey_keyPressed = False
    if keyevent.Modifiers = 4 then
        select case keyevent.KeyCode
        case 525, 531 'Alt+N, Alt+T
            msgbox "Vous avez activé le raccourci <Alt+" & ucase(keyevent.KeyChar) & ">"
            xkey_keyPressed = True
        end select
    end if
end function

function xkey_keyReleased(keyevent)
    xkey_keyReleased = False
end function
Pièces jointes
creemenu.odt
(13.25 Kio) Téléchargé 57 fois
AOOo 4.1.2 sur Win7
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1108
Inscrit le : 06 Avr 2016 08:26


Retour vers Suprême de code

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)