Voici la page du wiki :
Création de Listeners et de Handlers (la lecture de toute la page peut d'ailleurs être utile).
Plus de détails sur le code :
- la routine
addListener, assignée à l'ouverture du document, enregistre un listener du type
XPropertyChangeListener pour surveiller la propriété "VisibleArea" du "contrôleur" de document :
Code : Tout sélectionner
oDoc = thiscomponent
oCtrl = oDoc.getCurrentController()
oListener = createUnoListener("Visible_", "com.sun.star.beans.XPropertyChangeListener")
' la méthode doit préciser la propriété à surveiller
oCtrl.addPropertyChangeListener("VisibleArea", oListener)
- la routine
removeListener, assignée à la fermeture du document, désactive le listener (le listener doit être désactivé avant de modifier le code) :
Code : Tout sélectionner
oCtrl.removePropertyChangeListener("VisibleArea", oListener)
- les routines
Visible_propertyChange et
Visible_disposing sont les deux méthodes du listener en question.
Visible_propertyChange est appelée dès que le listener est notifié d'un changement :
Code : Tout sélectionner
sub Visible_propertyChange(ev)
feuille = oCtrl.getActiveSheet()
'n'agir que si la feuille active est celle du graphique
if feuille.name = feuille_graphique then
deplacerGraphique(feuille, nom_graphique)
end if
end sub
sub Visible_disposing
end sub
- la routine
deplacerGraphique transmet au graphique la nouvelle position Y de la propriété "VisibleAera". Le graphique est identifié par son nom, défini par clic-droit sur l'objet -> Nom... (voir également le navigateur de document F5) :
Code : Tout sélectionner
sub deplacerGraphique(feuille, nom)
graph = trouveGraphique(feuille, nom)
if not isNull(graph) then
position = graph.getPosition()
position.Y = oCtrl.visibleArea.Y + pad_from_top
graph.setPosition(position)
end if
end sub
function trouveGraphique(feuille, nom) as oject
dp = feuille.getDrawPage()
for i = 0 to dp.count-1
if dp(i).name = nom then
trouveGraphique = dp(i)
exit function
end if
next i
trouveGraphique = nothing
end function
Pour aller plus loin, voir les incontournables
outil d'introspection Xray et
Livre Programmation OpenOffice.org.
Cordialement.