Frames/Rahmen in Writer positionieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Frames/Rahmen in Writer positionieren

Beitrag von GrobMakrobiker »

Hallo zusammen,

ich probiere soeben Rahmen zu erstellen und diese in ein Writer-Dokument zu positionieren.
Meines Wissens nach funktioniert das mittels:

Code: Alles auswählen

oFrame.HoriOrientPosition = 1000 sowie
oFrame.VertOrientPosition = 1000
wobei wichtig ist, dass die automatische Positionierung ausgestellt ist:

Code: Alles auswählen

oFrame.HoriOrient = com.sun.star.text.HoriOrientation.NONE
oFrame.VertOrient = com.sun.star.text.VertOrientation.NONE
Der Stil der Frames ist als Formatvorlage in einer Writer-Datei gespeichert und wird dort nur aufgefufen.
Das wäre meine erste Frage: Welche Werte bleiben am Schluss - die in der Formatvorlage gespeicheten oder die per Makro übergebenen?

Das "echte" Problem liegt aber darin, dass ich die Höhe des erzeugten Frames auslesen möchte (oFrame.Height) und zu der vertikalen Position hinzuaddieren möchte, damit die Rahmen untereinander gezeichnet werden. Und das funktioniert nicht - die Rahmen werden erzeugt, liegen jedoch allesamt übereinander. Ich habe sie übrigens an der Seite verankert, eine Änderung dieser Einstellung hat auch nichts bewirkt.

Hier der Code:

Code: Alles auswählen

	For aktZeile = 4 to letzteZeile ' 4 = Zeile 5, nach dem Standard-Kopf
	
	oFrame = oDok.createInstance("com.sun.star.text.TextFrame")
	oFrame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE'AS_CHARACTER'AT_PAGE'AT_FRAME'AT_CHARACTER
	oFrame.Sizetype=2 'The height property determines the minimum height of the object, but the actual height will be increased if the content demands it. 
	oFrame.TextWrap = com.sun.star.text.WrapTextMode.DYNAMIC'NONE 'THROUGHT für Durchlauf,'PARALLEL für Seitenumlauf,'DYNAMIC für dynamischer Seitenumlauf.
	oFrame.FrameIsAutomaticHeight = TRUE
	oFrame.HoriOrientPosition = horPos
	oFrame.SetName(aktZeile)
	oFrame.VertOrientPosition = vPos(1)
	oFrame.HoriOrient = com.sun.star.text.HoriOrientation.NONE
	oFrame.VertOrient = com.sun.star.text.VertOrientation.NONE
	oText.insertTextContent(oCursor, oFrame, FALSE)

	' ZUGRIFF
	oFrames=oDok.getTextFrames()
	oFrame=oFrames.getByName(aktZeile)	'oFrame=oFrames.getByIndex(0)
       oFrameCursor=oFrame.createTextCursor()
	oFrameCursor.ParaStyleName = sAbsatz
	oFrameCursor.String=sInhalt
	oFrameCursor.TextFrame.FrameStyleName= sStyle
	nZaehler = nZaehler + 1
	nFrHoehe = oFrame.Height 
	print  "ermittelte Hohe des Frames: (oFrame.Height) =  " & nFrHoehe & "  Name des Rahmens =  " & aktZeile & " rechte vertikale Position=  " & vPos(1) 
	Next aktZeile
Alle Beispiele, die ich gesehen habe, sehen so ähnlich aus. Bei mir klappt ja (erstmal) alles, bis auf das Positionieren. Im Moment geht es nur um die Frames, die auf der rechten Spalte stehen (vPos(1).

Weiß jemand Rat? Da wäre ich sehr dankbar!

LG Groby
Dateianhänge
Writer-Vorlage.ott
(11.22 KiB) 27-mal heruntergeladen
Rahmen-Makro.ods
(14.3 KiB) 41-mal heruntergeladen
GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Re: Frames/Rahmen in Writer positionieren

Beitrag von GrobMakrobiker »

OK, es scheint an den Vorlagen in Writer zu liegen. Wenn ich die Übergabe der Formatvorlagen abstelle, dann sieht es schonmal besser aus. Wenns dann mal klappen sollte, gebe ich nochmal Bescheid.
Antworten