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
Am 14.04.21 um 08:12 schrieb Niels Luithardt:
Hallo Volker,
vielen Dank für deine Mail, aber ich bin kein Makroprogrammierer. D.h.
ich kann mit deinen Codezeilen wenig anfangen.
Was muss ich mit dem "Code" anstellen, damit ich irgendetwas
sinnvolles herausbekomme, bzw. angesagt bekomme?
Wer in Python bewandert ist, da könnte man was die Bildschirmansage
betrifft vielleicht etwas von anderen Add ons klauen. Es ist die
Frage, ob LO die entsprechenden Schnittstellen bietet. Aber das müsste
sich wirklich einer in der Programmierung bewandeter tun. Ich bin nur
Anwender...
Viele Grüße
Niels
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.