[Writer] Ecrire texte à la position du curseur de souris

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 !
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

[Writer] Ecrire texte à la position du curseur de souris

Message par martinbrait »

Bonjour à tous !

Je voudrais savoir s'il est possible de connaitre la positon du curseur texte (invisible) dans un document texte.

Cas d'usage :
Dans un document writer ouvert, je cherche à appairer le curseur de souris et le curseur d'écriture.
Je veux écrire automatiquement un petit bout de texte, à l'emplacement de mon curseur clignotant de souris.
Mon problème est que le texte s'écrit à la queue leu leu, en début de mon document,
sans lien avec la position de mon curseur de souris.
Y a t il une méthode pour écrire du texte, à une position donnée ?

Voici le code que j'utilise pour écrire du texte :

Code : Tout sélectionner

Sub EcrireDansDocument()
'Create a text object
Set objText= ThisComponent.getText

'Create a cursor object
Set objCursor= objText.createTextCursor

'Inserting some Text
objText.insertString objCursor, "The first line in the newly created text document." & vbLf, false

'Inserting a second line
objText.insertString objCursor, "Now we're in the second line", false
End Sub
jusqu'ici, je sais retourner la position du curseur :

Code : Tout sélectionner

Sub TestPositionCurseur()
print fnPosn(ThisComponent)
End Sub

function fnPosn(oDoc)
set mCurSelection = oDoc.currentSelection ' Record current selection
'Locking controller prevents flicker. But under ALL circumstances must be unlocked
on local error goto finished:
oDoc.lockControllers
oVC = oDoc.getCurrentController.getViewCursor
oVC.collapseToEnd  'Move view Cursor
oVC.gotoStartofLine(true)
nX = len(oVC.string)  'How many characters from the start of the line
nY = 0
'How many lines from top of page
nPage = oVC.getPage
while oVC.goUp(1,false) and oVC.getPage = nPage
   nY = nY + 1
wend
thisComponent.currentController.select(mCurSelection) 'Restore current selection
finished:
on error goto 0
oDoc.unlockControllers
fnPosn = "(" & nx & ", " & nY & ")"
end function
'Cette instruction semble être pertinente, mais concerne la manipulation de bookmarks, que je ne souhaite pas utiliser :

Code : Tout sélectionner

sub testinsert()
Dim nom as string
nom = "signet1"
    bookmark = ThisComponent.createInstance("com.sun.star.text.Bookmark")
    bookmark.Name = nom
vc = ThisComponent.CurrentController.ViewCursor
vc.setString(nom)
ThisComponent.Text.InsertTextContent(vc,bookmark,True)
End Sub

'====================
'SOLUTION :
'Il semble que ça fasse l'affaire : :D
'Y a t il plus générique, plus pertinent ?
'===================

Code : Tout sélectionner


Sub TestWrite2Mouse()
WriteThis2MouseCursor("Bonjour les amis !")
End Sub

Sub WriteThis2MouseCursor(sLine As String)
'Create a text object
Set objText= ThisComponent.getText

set mCurSelection = ThisComponent.currentSelection ' Record current selection
'Locking controller prevents flicker. But under ALL circumstances must be unlocked
on local error goto finished:
ThisComponent.lockControllers

'Get the cursor object
oVC = ThisComponent.getCurrentController.getViewCursor
oVC.collapseToEnd  'Move view Cursor
oVC.gotoStartofLine(true)

'Inserting some Text
objText.insertString oVC, sLine, False


finished:
on error goto 0
ThisComponent.unlockControllers

End Sub
Merci pour votre aide ! :D
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !