[Résolu][Writer] Accès aux propriétés des bordures d'image

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu][Writer] Accès aux propriétés des bordures d'image

Messagepar touvenant » 05 Juin 2019 17:34

Bonsoir à toutes et à tous,
lorsque je colle une image venant d'internet dans mon texte, je souhaite en supprimer les bordures.
J'ai la possibilité de faire ça à la mano avec clic droit>propriétés onglet "bordures" et en cliquant sur l’icône sans bordure de la zone "préréglages".
Mais, si j'ai inséré plusieurs images, je préférerais laisser ma paresse s'exprimer librement et lancer une macro qui fasse le boulot à ma place...

J'ai essayé dans un premier temps d'accéder aux propriétés de bordure qui apparaissent pour les objets graphiques dans Xray 6.0
J'ai voulu accéder à ces propriétés de la même façon que les propriétés de positionnement en précisant comme valeur NONE mais ça ne fonctionne pas :
affichage de l'EDI basic avec le message d'erreur : "Erreur d'exécution BASIC. Variable d'objet non définie"

J'ai alors essayé d'affecter une valeur de couleur = 0 mais ça ne fonctionne pas non plus...(aucun message d'erreur)

Est-ce que l'un ou l'une d'entre vous pourrais m'aiguiller sur une piste svp ?


Code : Tout sélectionner   AgrandirRéduire
Sub traitementGraphiques
   Dim oDoc as object
   Dim graphics as object
   Dim graphic as object
   Dim j as integer
   oDoc = ThisComponent
   graphics = oDoc.getGraphicObjects()
   For j=0 to graphics.count-1
      graphic=graphics(j)
   With graphic
      '.TopBorder = NONE
      .TopBorder.Color = 0
      '.RightBorder = NONE
      .RightBorder.Color = 0
      '.BottomBorder = NONE
      .BottomBorder.Color = 0
      '.LeftBorder = NONE
      .LeftBorder.Color = 0
   End With
   Next j
End Sub
Dernière édition par touvenant le 07 Juin 2019 22:54, édité 4 fois.
LibreOffice 6.2.2.2 obligatoire
Windows7 Pro SP1 x64 v6.1 obligatoire
touvenant
Membre lOOyal
Membre lOOyal
 
Message(s) : 33
Inscrit le : 23 Déc 2012 19:42

Re: [Writer]Accéder aux propriétés des bordures d'une image

Messagepar Dude » 05 Juin 2019 17:51

Salut,

touvenant a écrit:lorsque je colle une image venant d'internet dans mon texte, je souhaite en supprimer les bordures.

Sous OpenOffice, je ne reproduis pas. Une image collée s'affiche sans bordure.

Maintenant, pas besoin de macro pour ce genre d'opération.
Il te suffit de créer un style de cadre sur lequel tu paramètres l'affichage (ou non) de bordures.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21118
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Writer]Accéder aux propriétés des bordures d'une image

Messagepar touvenant » 06 Juin 2019 03:32

Merci Dude pour cette solution qui est effectivement fonctionnelle :bravo: .
Elle illustre bien le dicton ironique "pourquoi faire simple quand on peut faire compliqué ?"
Cependant, ma paresse n'a d'égale que mon obstination à résoudre les difficultés :fou: (comment peut-on être affublé de deux défauts aussi paradoxaux ?!)

J'ai entretemps observé un détail avec Xray 6.0 : la propriété BottomBorder (et autres xxxBorder) est de type struct , tout comme la propriété Size, dont les propriétés Height et Width s'accèdent directement :
Code : Tout sélectionner   AgrandirRéduire
MonImage = MonDocument.createInstance("com.sun.star.text.GraphicObject")
MonImage.Height = xxx 'et non MonImage.Size.Height = xxx


J'ai donc tenté de faire pareil avec Color, en y attribuant une valeur décimale correspondant à la couleur blanche :
Code : Tout sélectionner   AgrandirRéduire
Sub traitementGraphiques
   Dim oDoc as object
   Dim graphics as object
   Dim graphic as object
   Dim j as integer
   oDoc = ThisComponent
   graphics = oDoc.getGraphicObjects()
   For j=0 to graphics.count-1
      graphic=graphics(j)
   With graphic
      '.TopBorder = NONE
      '.TopBorder.Color = 16777215
      .Color = 16777215
      '.RightBorder = NONE
      '.RightBorder.Color = 16777215
      .Color = 16777215
      '.BottomBorder = NONE
      '.BottomBorder.Color = 16777215
      .Color = 16777215
      '.LeftBorder = NONE
      '.LeftBorder.Color = 16777215
      .Color = 16777215
   End With
   Next j
End Sub

Mais, là encore, j'ai un message d'erreur :
Erreur d'exécution BASIC. Propriété ou méthode non trouvée : Color

C'est quoi ce type struct ? Je n'ai rien trouvé dans "l'API d'OOo (presque) sans peine" de B. Marcelly, ni dans le "Guide du programmeur OpenOffice". Je vais envisager le guide du voyageur intergalactique...
LibreOffice 6.2.2.2 obligatoire
Windows7 Pro SP1 x64 v6.1 obligatoire
touvenant
Membre lOOyal
Membre lOOyal
 
Message(s) : 33
Inscrit le : 23 Déc 2012 19:42

Re: [Writer]Accéder aux propriétés des bordures d'une image

Messagepar Dude » 06 Juin 2019 09:16

touvenant a écrit:C'est quoi ce type struct ?

C'est un type d'objet prédéfini qui doit être déclaré.
Dans ton cas, il s'agit d'une structure BorderLine :
Code : Tout sélectionner   AgrandirRéduire
Dim oBord as new com.sun.star.table.BorderLine

Il y a des exemples d'utilisation sur ce forum : viewtopic.php?f=8&t=55253&hilit=borderline
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21118
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Writer]Accéder aux propriétés des bordures d'une image

Messagepar touvenant » 07 Juin 2019 22:49

Yeeeeeeeeees !
Merci grandement THE Dude !
Que la force soit avec toi...

Code : Tout sélectionner   AgrandirRéduire
Sub traitementGraphiques
   Dim oDoc as object
   Dim oGraphics as object
   Dim oGraphic as object
   Dim j as integer
   'Déclaration d'une variable de type structure
   Dim borderstruct as new com.sun.star.table.BorderLine
   'Pour traiter les 4 bordures simultanément, construction d'un tableau contenant les 4 propriétés
   bordures = array("BottomBorder", "LeftBorder", "RightBorder", "TopBorder")
   oDoc = ThisComponent
   'Récupération de toutes les images du document
   oGraphics = oDoc.getGraphicObjects()
   'pour chacune des images
   For j=0 to oGraphics.count-1
      oGraphic=oGraphics(j)
      borderstruct.Color = 16711680 'Couleur de la bordure en décimal bk=0 blanc=16777215 red=16711680
      borderstruct.InnerLineWidth = 0 'La largeur de la partie intérieure d'un double trait (en 1/100 mm).
                              ' Si cette valeur est zéro, une seule ligne est dessinée.
      borderstruct.OuterLineWidth  = 0 'La largeur d’une ligne simple
                              'ou la largeur de la partie extérieure d’une ligne double (en 1/100 mm).
                              'Si cette valeur est zéro, aucune ligne n'est dessinée.
      borderstruct.LineDistance  = xxx 'La distance entre les parties intérieure et extérieure
                              'd'une ligne double (en 1/100 mm).
      for each bordure in bordures 'pour chaque bordure du tableau
         oGraphic.setPropertyValue(bordure,borderstruct) 'Affecte la valeur borderstruct à la propriété bordure
      next bordure
   Next j
End Sub
LibreOffice 6.2.2.2 obligatoire
Windows7 Pro SP1 x64 v6.1 obligatoire
touvenant
Membre lOOyal
Membre lOOyal
 
Message(s) : 33
Inscrit le : 23 Déc 2012 19:42


Retour vers Macros et API

Qui est en ligne ?

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