ich habe ein Problem bei der Positionierung eines per Makro eingefügten Textrahmen.
Ziel ist es einen Textrahmen an die Position der aktuellen Absatzmarke, bzw. Cursorposition zusetzen,
wobei die Verankerung an der aktuellen Seite des Dokuments erfolgen soll.
Ja, am einfachsten wäre es nicht an der Seite zu verankern, sondern am Paragraph, aber siehe hier:
http://www.libreoffice-forum.de/viewtop ... =5&t=16683
Nun dachte ich mir, ich lese per Code die Cursorposition aus und übergebe die XY-Koordinaten an den Textrahmen,
welcher an der Seite verankert ist, dabei erhalte ich eine Fehlermeldung.
Damit es ein wenig übersichtlicher wird, habe ich den Code ein wenig gekürzt.
Siehe Kommentare im Code:
Code: Alles auswählen
REM ***** BASIC *****
Sub FrameEinfuegen
Dim oDoc as Object
Dim oText as Object
Dim oFrame as Object
Dim oCursor as Object
Dim oCurPos as New com.sun.star.awt.Point
Dim oFCursor as Object
Dim strName as String
REM Hier den Text des Texfeldes innerhalb des Rahmens festlegen
strName="Mein Rahmen - erstellt am: " & NOW
oDoc=thisComponent
oText = oDoc.Text
REM ____ Cursor erzeugen _________________________________________________
REM Den ViewCursor erzeugen, damit der Rahmen an der gerade
REM aktuellen Absatzmarke eingefügt werden kann.
REM Wenn die Verankerung auf "TextContentAnchorType.AT_PAGE", also
REM Verankerung an der Seite eingestellt wurde, dann wird der Rahmen immer
REM in der ersten Zeile der aktuellen Seite angezeigt.
oCursor= oDoc.GetCurrentController.ViewCursor
REM ____ ermitteln der aktuellen Cursorposition im Dokument _______________
oCurPos=oCursor.getPosition()
'mri oCursor
REM ____ Den neuen Textrahmen als Objekt erstellen. ______________________
oFrame = oDoc.createInstance("com.sun.star.text.TextFrame")
REM ═════════════ Eigenschaften des Rahmens ═══════════════════════════
With oFrame
REM ____ Breite und Höhe des Rahmen festlegen ___________________________
.width = 8000
.height = 5000
REM ____ Umlauf (TextWrap) ________________________________________________
.TextWrap = com.sun.star.text.WrapTextMode.THROUGHT
.Surround=com.sun.star.text.WrapTextMode.THROUGHT
REM ____ Verankerung ____________________________________________________
REM
REM Die Verankerungsangaben müssen ausgeschaltet bleiben, wenn
REM der Rahmen an der Cursorposition eingefügt werden soll!
REM Wenn AT_PAGE verwendet wird, dann wird der Rahmen nicht am
REM Cursor, sondern auf der aktuellen Seite eingefügt!
REM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
REM mögliche Konstanten:
REM AT_PARAGRAPH The anchor of the object is set at the top left position of the paragraph.
REM AS_CHARACTER The object is anchored instead of a character.
REM AT_PAGE The object is anchored to the page.
REM AT_FRAME The object is anchored to a text frame.
REM AT_CHARACTER The object is anchored to a character.
.AnchorType=com.sun.star.text.TextContentAnchorType.AT_PAGE
REM ____ Position des Rahmen festlegen in 100/mm ________________________
REM Die Positionangaben müssen ausgeschaltet bleiben, wenn
REM der Rahmen an der Cursorposition eingefügt werden soll.
REM Die Angaben sind absolut und bezihen sich immer auf die Position
REM im Dokument und nicht auf die aktuelle Seite!
' .HoriOrientPosition =2000
' .VertOrientPosition = 2000
REM ____ Name des Rahmen festlegen _____________________________________
REM zwecks eindeutiger Identifikation habe ich hier NOW hinzugefügt
REM diese liefert das aktuelle Datum mit der aktuellen Zeit
REM DATE oder TIME wäre auch möglich aber nicht eindeutig!
REM Der Inhalt der Variable "strName" wird weiter oben im Code festgelegt.
.setname(strName)
End With
REM ═══════════ Ende der WITH-ANWEISUNG ═══════════════════════════════════════════════
REM ____ Rahmen in das Dokument einfügen _________________________________________
REM Wenn bei bei Codeausführung diese Zeile als Fehler markiert wird,
REM befindet sich der ViewCursor NICHT im Dokument, sondern im Textrahmen.
REM Hier kann kein weiterer Rahmen eingefügt werden, deshalb die Fehlermeldung.
oText.insertTextContent(oCursor, oFrame, TRUE)
REM ____ Zeichenformatierung des Textfeldes _______________________________________
' Wäre auch mittels Styles möglich!
' Identifikation des Rahmen über dessen zuvor festgelegten Namen (strName)
oFrame = oDoc.TextFrames.getByName(strName)
' Cursor erzeugen, um auf das Textfeld zu greifen zu können.
oFCursor = oFrame.createTextCursor
' WITH-Anweisung zwecks Foramtierung
With oFCursor
.charWeight = com.sun.star.awt.FontWeight.BOLD
.CharHeight=20
.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTER
.CharColor=RGB(255,0,0)
.String = Now
End With
' mri oframe
REM Hier kommt die Fehlermeldung, dass die Positionsangaben nicht gesetzt werden können!
oFrame.Position=oCurPos
' mri oFCursor
End Sub
Gruß
Craig