Hallo Matthias,
hier erst einmal ein Code mit dem man einen Textrahemn einfügen kann.
Textfelder und Textrahmen sind zwei unterschiedliche Module. Damit verändern sich auch die
Eigenschaften(Porperties), Methoden(Methods), Schnittstellen(Interfaces) und Services;
auch die Reihenfolge des Codes ändert sich in diesem Fall, das Textfeld kann erst
konfiguriert und/oder befüllt werden, wenn das Frame schon angelegt wurde.
Es reicht hier also nicht einfach ein anderes Modul zu laden.
Code: Alles auswählen
Alles andere muss ggf. auch angepasst werden.
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
REM Hier den Text des Texfeldes innerhalb des Rahmens festlegen
strName="Mein Rahmen - erstellt am: " & NOW
oDoc=thiscomponent
oText = oDoc.Text
' oCursor = oText.createTextCursor()
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.
REM Eine Lösung hierfür habe ich nicht gefunden!
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 ____ Weite und Höhe des Rahmen festlegen ___________________________
.width = 8000
.height = 5000
' .CharWeight = com.sun.star.awt.FontWeight.BOLD
' .CharFontName = "Arial"
' .CharHeight=15
' .CharColor=RGB(0,200,200)
REM ____ Umlauf (TextWrap) ________________________________________________
REM NONE text does not flow around the object.
REM THROUGHT text flow ignores the object.
REM PARALLEL text flows to the left and right of the object.
REM DYNAMIC text flow depends on the situation. The text formatting decides the best way.
REM LEFT text flows to the left side of the object.
REM RIGHT text flows to the right side of the object.
.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 ____ Füllung festlegen ______________________________________________
REM mögliche Konstanten:
REM NONE the area is not filled.
REM SOLID use a solid color to fill the area.
REM GRADIENT use a gradient color to fill the area.
REM HATCH use a hatch to fill the area.
REM BITMAP use a bitmap to fill the area.
.FillStyle=com.sun.star.drawing.FillStyle.NONE
.FillTransparence=100
REM ____ Umrandung festlegen _____________________________________________
REM mögliche Konstanten:
REM NONE the line is hidden.
REM SOLID the line is solid.
REM DASH the line use dashes.
.LineStyle=com.sun.star.drawing.LineStyle.NONE
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 ___________________________________________
' 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 = "Unter Zeichenformatierung im Code änderbar" & CHR(10) & _
"Dazu in der With-Anweisung von oFCursor .String ändern"
End With
mri oframe
'oFrame.Position=oCurPos
' mri oFCursor
End Sub
Wie Du hier ggf. schon gesehen hast, habe ich noch Schwierigkeiten mit der Positionierung des Rahmens:
http://www.libreoffice-forum.de/viewtop ... 12&t=16703
hier stelle ich mich gerade voll dämlich an
Nein ganz und gar nicht. Ich schüttel die Codes auch nicht einfach so aus dem Handgelenk.
Ich nutze alle erdenklichen Infoquellen die das Netz bietet und jede Menge Dokus.
Man lernt nie aus!
Auch Deinem Wunsch zu entsprechen, den Cursor direkt in den Rahmen/ das Textfeld zu setzen, ist noch nicht implementiert.
Gruß
Craig