Date: prev next · Thread: first prev next last
2021 Archives by date, by thread · List index


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.