Macros

From The Document Foundation Wiki
Jump to: navigation, search

Comment utiliser les icônes de LibreOffice ?

On souhaite utiliser les icônes de LibreOffice, par exemple pour homogénéiser la présentation des boutons de commande dans un formulaire.


On peut utiliser pour cela le service GraphicProvider[1] qui est le service de l'API[2] donnant accès aux éléments graphiques de toutes sortes.

Ce service permet de charger ou enregistrer des éléments graphiques quel que soit leur emplacement. En l'occurrence nous utiliserons sa méthode queryGraphic[3] qui attend un paramètre de type PropertyValues contenant l'Url[4] de l'image, l'icône, etc.

Les icônes utilisées par le logiciel figurent dans des fichiers compressés qui peuvent être trouvés dans un sous-répertoire du dossier "programme".

Exemple de chemin Windows :

C:\Program Files\LibreOffice 3.5\share\config\images.zip

Il serait limitatif de devoir utiliser l'Url absolu d'une image puisqu'on voit que ce dernier peut changer notamment en fonction de la version ou du système sur lequel va tourner le programme.

Heureusement nous pouvons utiliser la ressource "relative" : private:graphicrepository

Exemples pour l'icône Ouvrir :

sub LibOIcone

dim LibOFeuille as object
dim LibOForm as object
dim LibOIcone as object
dim LibOBtn as object
dim LibOGraphicProvider as object
dim LibOProps(0) As New com.sun.star.beans.PropertyValue

LibOFeuille = thiscomponent.sheets.getByName("Feuille1")
LibOForm = LibOFeuille.DrawPage.Forms.getByName("Formulaire")

LibOProps(0).Name = "URL"
LibOProps(0).Value = "private:graphicrepository/res/dir-open.png"

LibOGraphicProvider = CreateUnoService("com.sun.star.graphic.GraphicProvider")
LibOIcone = LibOGraphicProvider.queryGraphic(LibOProps)

LibOBtn = LibOForm.getByName("BtnOuvrir")
LibOBtn.ImagePosition = com.sun.star.awt.ImagePosition.Centered
LibOBtn.Graphic = LibOIcone

end sub

Ce code est associé à l'événement Ouvrir le document du classeur en pièce jointe.

sub LibOIcone(LibOEvent)

dim LibOIcone as object
dim LibOBtn as object
dim LibOGraphicProvider as object
dim LibOProps(0) As New com.sun.star.beans.PropertyValue

LibOProps(0).Name = "URL"
LibOProps(0).Value = "private:graphicrepository/res/dir-open.png"

LibOGraphicProvider = CreateUnoService("com.sun.star.graphic.GraphicProvider")
LibOIcone = LibOGraphicProvider.queryGraphic(LibOProps)

LibOBtn = LibOEvent.source.getByName("BtnOuvrir")
LibOBtn.ImagePosition = com.sun.star.awt.ImagePosition.Centered
LibOBtn.Graphic = LibOIcone

end sub

Ce code est associé à l'événement Lors du chargement du formulaire figugant dans la base en pièce jointe.

Nota : l'Url donné dans cet exemple peut évoluer selon la version. Par exemple pour la version 4.4 le bouton Ouvrir pourra être situé :

private:graphicrepository/cmd/sc_open.png

. Notes :

  1. Voir la documentation de l'API
  2. Application Programming Interface, interface de programmation applicative
  3. Voir la documentation de l'API
  4. Un URL (Uniform Resource Locators) indique l'adresse d'un document ou d'un serveur sur Internet, sur un réseau ou un disque. La structure générale d'un URL varie selon son type et se présente généralement sous la forme : Service://nom_hôte:Port/Chemin/Page#Marque (parfois, certains éléments ne sont pas nécessaires). Un URL peut être une adresse FTP, une adresse Internet (HTTP), une adresse de fichier ou une adresse e-mail.