Hallo Niels,
das folgende Makro wird dir die aktuelle Cursorposition sowohl von oben als auch von links ausgeben. Es ist beileibe nicht optimiert und es funktioniert auch nur dann korrekt für den Y-Wert, wenn im Dokument immer dieselbe Seitenformatvorlage verwendet wird. Der X-Wert ist nur dann korrekt, wenn die Darstellung des Dokuments das Bearbeitungsfenster genau füllt oder breiter ist.
In diesem Makro geht es vor allem um die Werte, die aus der Anwendung stammen. Diese Werte werden von der API (Application Programming Interface) bereitgestellt, auf die mit Basic und Python gleichermaßen zugegriffen wird. Die Berechnung stellt für beide Sprachen kein Problem dar.
Option VBASupport 1
Sub PrintCursorPosition
Dim oDoc 'Aktuelles Dokument
Dim oViewCursor 'Aktueller Viewcursor
Dim cursorPos As New com.sun.star.awt.Point 'Cursorposition
Dim iPreviousPages As Integer 'Die Anzahl der vorherigen Seiten
Dim dInterPageSpace As Double 'Der schmale Steg zwischen den Seiten,
'in 1/100 mm
Dim oStyle 'Aktuelle Seitenvorlage
REM Die Werte aus der Seitenvorlage in 1/100 mm:
Dim dHeight As Double 'Seitenhöhe
Dim dWidth As Double 'Seitenbreite
Dim dTop As Double 'Oberer Seitenrand
Dim dLeft As Double 'Linker Seitenrand
REM Die Ausgabewerte:
Dim lXCursor As Long 'Abstand des Cursors von links in mm
Dim lYCursor As Long 'Abstand des Cursors von oben in mm
Dim sMsgText As String 'Ausgabestring
oDoc = ThisComponent
oViewCursor = oDoc.CurrentController.getViewCursor()
oStyle = oDoc.StyleFamilies.getByName("PageStyles")_
.getByName(oViewCursor.PageStyleName)
dHeight = oStyle.Height
dWidth = oStyle.Width
dTop = oStyle.TopMargin
dLeft = oStyle.LeftMargin
REM Die Koordinaten des Cursors bezogen auf die obere linke Ecke
REM der Writerfolie in 1/100 mm:
cursorPos = oViewCursor.getPosition()
dInterPageSpace = 501.3 'empirisch ermittelt
iPreviousPages = Fix(cursorPos.Y / (dHeight + dInterPageSpace))
REM Die Cursorposition ist der Abstand zum Seitenrand
REM plus der Seitenrand.
lXCursor = Round((cursorPos.X + dLeft) / 100)
lYCursor = Round(((cursorPos.Y - _
iPreviousPages * (dHeight + dInterPageSpace)) _
+ dTop) / 100)
sMsgText = "Cursorposition:" & Chr(10) & _
"von links: " & lXCursor & " mm" & Chr(10) & _
"von oben: " & lYCursor & " mm"
MsgBox sMsgText, MB_ICONINFORMATION, "Cursorposition"
End Sub
Das Makro ist aus einem Zusammenhang heraus genommen und sollte nur die Auswertung von Formatvorlagen illustrieren. Es ist, wie schon gesagt, nicht frei von Fehlern, könnte aber einen Ansatz zu einer in jeder Situation korrekten Lösung bieten.
Du kannst das Makro über "Extras|Makros|Makros verwalten" in ein Modul einfügen (dazu gibt es Hilfetexte) und es dann über "Extras|Anpassen" z.B. im Menü eines jeden Writerdokuments unterbringen.
Schöne Grüße
Volker