Bonjour,

Philippe Pons a écrit :
Bonjour,

Je vois qu'on peut bouger un curseur d'écriture vers le mot précédent avec la méthode gotoPreviousWord. Je ne trouve pas de méthode équivalente pour le curseur visible.
C'est pas possible?

Merci,
Non, a priori ce n'est pas possible. J'ai longtemps creusé la question lors du développement de mon extension MoveText <http://www.lucsorel.com/index.php?page=downloads#movetext>, dont la fonctionnalité est de déplacer du texte sélectionné notamment de le déplacer par mot. L'API propose 2 objets aux noms voisins mais aux fonctionnalités différentes :

   * ViewCursor (thisComponent.getCurrentController().getViewCursor())
     : c'est le curseur qu'on voit quand on tape un document sous
     Writer. Il sait se déplacer par caractère et aller au début/fin de
     ligne

   * TextCursor : on peut le créer à partir de rien
     (thisComponent.Text.createTextCursor()) ou à partir du curseur
     visuel
     (thisComponent.Text.createTextCursorByRange(viewCursor.getStart()))
     : c'est un curseur d'écriture, invisible à l'écran, qu'il se
     déplace même en sélectionnant du texte. Il sait se déplacer par
     caractère, par mot et par paragraphe.

Le fait que ces 2 objets n'ont pas les mêmes compétences m'ont souvent fait ch... anger d'humeur lors du développement de mon extension car j'avais à manipuler les deux en parallèle. En fonction de ce que tu veux faire, peut-être que seul un curseur est nécessaire.

Pour des exemples de manipulation de ces 2 curseurs, tu peux regarder dans le code source de MoveText <http://www.lucsorel.com/media/downloads/movetext.bas> si tu veux. Tu peux jeter un coup d'œil à la fonction moveTextToRightByWord pour voir comment gérer le déplacement "simultané" des 2 curseurs vis-à-vis des mots. On peut procéder plus simplement en déplaçant un curseur d'écriture par mot en lui demandant de sélectionner le texte et déplaçant le curseur visuel du nombre de caractère de la sélection, mais cela ne fonctionne si le curseur visuel était en tête de paragraphe ou de puce dans une liste. En effet dans ce cas, car un des curseurs comptent les sauts (de puce ou de paragraphe) comme un caractère supplémentaire alors que l'autre les ignore. Bref... bon courage ! :-)

Sympathicamicalement, Luc

Répondre à