[Basic] Barre de menus : ajout, suppression
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.
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.
-
- HédOOniste
- Messages : 1527
- Inscription : 28 sept. 2008 12:56
- Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ
[Basic] Barre de menus : ajout, suppression
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.
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.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
(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)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
-
- HédOOniste
- Messages : 1696
- Inscription : 27 oct. 2008 14:30
Re: [Basic] Barre de menus : ajout, suppression
Et comment que ça va nous intéresser !!
Merci en tout cas.
Merci en tout cas.
OpenOffice 3.1.1 sous XP-SP2 et LibreOffice 3.5.0 sous Win 7
-
- Membre OOrganisé
- Messages : 82
- Inscription : 12 janv. 2008 23:38
Re: [Basic] Barre de menus : ajout, suppression
Merci,
Je ne sais pas quand ni pourquoi faire exactement mais je me doute que cela me servira un jour.
Je ne sais pas quand ni pourquoi faire exactement mais je me doute que cela me servira un jour.
Alain
3.0.1 portable sous XP SP3 (boulot) et 3.0.0 sous Mandriva 2009.0
3.0.1 portable sous XP SP3 (boulot) et 3.0.0 sous Mandriva 2009.0
-
- Membre lOOyal
- Messages : 27
- Inscription : 09 juin 2011 12:36
Re: [Basic] Barre de menus : ajout, suppression
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.
grand merci Alain
et de plus tu habites dans un lieu que j'affectionne énormément.
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.
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
Dom : OOo 3.3 & LibO 3.4.1 sous Win 7
Bur : OOo 3.3 sous Win XP
-
- HédOOniste
- Messages : 1527
- Inscription : 28 sept. 2008 12:56
- Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ
Re: [Basic] Barre de menus : ajout, suppression
Bonjour.. soir,
Ouf ! J'ai cru qu'il s'agissait d'une réclamation...
Merci donc à vous aussi (coucou Léa) d'encourager les petits participants libres
à un projet libre... ... et gratuit en plus.
Bien cordialement, Alain
Ouf ! J'ai cru qu'il s'agissait d'une réclamation...
Merci donc à vous aussi (coucou Léa) d'encourager les petits participants libres
à un projet libre... ... et gratuit en plus.
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)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
-
- IdOOle de la suite
- Messages : 25175
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Basic] Barre de menus : ajout, suppression
Autre méthode pour la création d'un menu à plusieurs niveaux :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
- Membre enthOOusiaste
- Messages : 467
- Inscription : 10 nov. 2012 17:05
Re: [Basic] Barre de menus : ajout, suppression
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:
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
'---------------------------------------------------------------------
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
Java 8.x (x64 et x86), Firefox, Thunderbird,....
“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu
-
- Membre enthOOusiaste
- Messages : 467
- Inscription : 10 nov. 2012 17:05
Re: [Basic] Barre de menus : ajout, suppression
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).
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.
Pour affecter seulement l'ajout au fichier en cours, il suffit de remplacer dans la routine acMenuCreer, le code
par
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.
Pour affecter seulement l'ajout au fichier en cours, il suffit de remplacer dans la routine acMenuCreer, le code
Code : Tout sélectionner
oFrame.layoutManager.getElement(_
"private:resource/menubar/menubar").setSettings(oSettings)
Code : Tout sélectionner
' 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
Java 8.x (x64 et x86), Firefox, Thunderbird,....
“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu
-
- HédOOniste
- Messages : 1527
- Inscription : 28 sept. 2008 12:56
- Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ
Re: [Basic] Barre de menus : ajout, suppression
Bonjour à tous...
... et merci à ThierryT pour son ajout afin que seul le fichier en cours soit impacté.
Pour ce qui est de son commentaire en alerte rouge
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.
... et merci à ThierryT pour son ajout afin que seul le fichier en cours soit impacté.
Pour ce qui est de son commentaire en alerte rouge
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)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
-
- Membre enthOOusiaste
- Messages : 467
- Inscription : 10 nov. 2012 17:05
Re: [Basic] Barre de menus : ajout, suppression
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.
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
Java 8.x (x64 et x86), Firefox, Thunderbird,....
“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu
-
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Basic] Barre de menus : ajout, suppression
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.
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
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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
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)
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)