Hello Jurassic Pork,
de retour après une petite absence ...
bien vu pour CharStrikeout, je n'avais pas décelé ce problème de casse.
j'avais bien pensé en codant mes tests à une notion de zone de texte homogène dans son formatage qui m'aurait évité de balayer caractère par caractère mais je ne voyais pas comment les obtenir : le bouquin de BMarcelly n'en parle pas et je n'aurais pas pensé à balayer des paragraphes dans une cellule Calc, donc
merci beaucoup pour cette découverte. J'ai vu par la suite que c'était abordé dans le guide Basic d'OpenOffice et dans le bouquin d'A.Pitonyak.
j'ai étudié également la manière de mémoriser les propriétés de formatage : c'est plus générique et moins fastidieux que de spécifier chacune d'entre elles. J'ai essayé avec les propriétés de paragraphe, et là cela se complique un peu car il y des propriétés de type structure ou array que je ne sais pas comment traiter de façon générique (je suppose qu'il faudrait utiliser la reflection ?).
Sinon, je ne comprends pas pourquoi les API ne fournissent pas le moyen de "cibler" la portée des propriétés (propriétés de caractère, de paragraphe ...) et que l'on en soit réduit à faire de l'analyse de chaine sur les noms de propriétés.
puisque ce sont les services CharacterProperties et ParagraphProperties qui déterminent la présence de ces propriétés, j'avais pensé instancier le service par unoCreateService, puis via l'interface XPropertySet balayer les propriétés pour obtenir une liste plus ciblée mais
createUnoService me renvoie un type différent de celui attendu 
:
pour
com.sun.star.style.ParagraphProperties, j'obtiens un objet de type
com.sun.star.comp.chart2.Title supportant les services:
- com.sun.star.beans.PropertySet
- com.sun.star.chart2.Title
- com.sun.star.layout.LayoutElement
- com.sun.star.style.ParagraphProperties
pour
com.sun.star.style.CharacterProperties, j'obtiens un objet de type
com.sun.star.comp.chart2.RegressionEquation supportant les services:
- com.sun.star.beans.PropertySet
- com.sun.star.chart2.RegressionEquation
- com.sun.star.drawing.FillProperties
- com.sun.star.drawing.LineProperties
- com.sun.star.style.CharacterProperties
comment expliquer cela? j'ai vu qu"il y avait une autre possibilité d'instancier un service avec des arguments via getProcessServiceManager().createInstanceWithArguments() ?
serait-ce la solution ?
second écueil, j'ai essayé de transmettre aussi des propriétés de paragraphe (par exemple le cadrage) : cela fonctionne dans le sens cellule vers commentaire, mais pas dans l'autre :
le formatage au niveau paragraphe dans une cellule semble ignoré par Calc, il faut passer au niveau cellule. Je conçois qu'une cellule ne soit pas destinée à du formatage de paragraphe mais le problème c'est que l'on aboutit à ce constat après pas mal de recherches et que ce n'est documenté nulle part (en tout cas, je n'ai rien vu à ce sujet)
sens cellule => commentaire : on peut formater individuellement le cadrage de chaque paragraphe (cependant, il faut afficher le commentaire pour le constater, s'il est masqué et que l'on passe la souris sur l'ancre rouge pour le visualiser, le formatage n'est pas correctement restitué)
Code : Tout sélectionner
sub JustifyComment
dim oCell,oText, oCursorCell,oParag,oEnum as object
dim i as integer
oCell = ThisComponent.getSheets().getByIndex(0).getCellRangeByName("B25")
oText = oCell.Annotation.Text
oCursorCell = oText.createTextCursor()
oCursorCell.gotoStart(false)
i=0
oEnum = oText.createEnumeration
While oEnum.hasMoreElements
oParag=oEnum.nextElement
i=i+1
oCursorCell.paraAdjust=i ' cadrage individualisé
oCursorCell.goRight(len(oParag.String), true)
if i=1 then
oCursorCell.CharColor=13181214
elseif i=2 then
oCursorCell.CharColor=7512015
else
oCursorCell.CharColor=1475155
end if
oCursorCell.goRight(1,false)
Wend
end sub
sens commentaire => cellule : le cadrage est ignoré au niveau paragraphe (en mode manuel, le formatage est disponible dans la barre de bouton au niveau paragraphe mais une action au niveau d'un paragraphe est de suite appliquée aux autres, donc au final on est aussi au niveau cellule)
Code : Tout sélectionner
sub JustifyCell
dim oCell,oText, oCursorCell,oParag,oEnum as object
dim i as integer
oCell = ThisComponent.getSheets().getByIndex(0).getCellRangeByName("A25")
oText = oCell.Start.Text
oCursorCell = oText.createTextCursor()
oCursorCell.gotoStart(false)
i=0
oEnum = oText.createEnumeration
While oEnum.hasMoreElements
oParag=oEnum.nextElement
i=i+1
oCursorCell.paraAdjust=i ' ne fonctionne pas sans sélection du parag
oCursorCell.goRight(len(oParag.String), true)
if i=1 then
oCursorCell.CharColor=13181214
elseif i=2 then
oCursorCell.CharColor=7512015
else
oCursorCell.CharColor=1475155
end if
oCursorCell.paraAdjust=i ' ne fonctionne pas avec sélection du parag
oCursorCell.goRight(1,false)
Wend
oCursorCell.GotoStart(false)
oCursorCell.GotoEnd(true)
oCursorCell.paraAdjust=3 ' ne fonctionne pas avec sélection de la la totalité du texte
oCell.paraAdjust=3 ' OK
end sub
je regarde plus en détail pour la classe rtfTransferable : tu as probablement raison sur la cause, mais je trouve la documentation lacunaire et trompeuse à ce sujet, j'y reviendrai...
eseb