[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 !
touvenant
Membre OOrganisé
Membre OOrganisé
Messages : 50
Inscription : 23 déc. 2012 19:42

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

Message par touvenant »

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

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 modification par touvenant le 07 juin 2019 23:54, modifié 4 fois.
LibreOffice 7.4.6.2 x64
Windows10 Pro v10.0.19044
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25145
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

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

Message par Dude »

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.
touvenant
Membre OOrganisé
Membre OOrganisé
Messages : 50
Inscription : 23 déc. 2012 19:42

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

Message par touvenant »

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

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

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 7.4.6.2 x64
Windows10 Pro v10.0.19044
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25145
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

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

Message par Dude »

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

Dim oBord as new com.sun.star.table.BorderLine
Il y a des exemples d'utilisation sur ce forum : https://forum.openoffice.org/fr/forum/v ... borderline
touvenant
Membre OOrganisé
Membre OOrganisé
Messages : 50
Inscription : 23 déc. 2012 19:42

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

Message par touvenant »

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

Code : Tout sélectionner

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 7.4.6.2 x64
Windows10 Pro v10.0.19044
Verrouillé