[gelöst] Textrahmen erstellen mit absoluten Koordinaten

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

Moderator: Moderatoren

Yad
Beiträge: 6
Registriert: Mi, 20.12.2006 22:18

[gelöst] Textrahmen erstellen mit absoluten Koordinaten

Beitrag von Yad »

Ich möchte in einem Writer-Dokument einen Textrahmen einfügen (OO 1.1.5). Das ist eigentlich kein Problem.

Code: Alles auswählen

EmpfaengerFrame = VersandText.createInstance("com.sun.star.text.TextFrame")
EmpfaengerFrame.Width = 8300
EmpfaengerFrame.Height = 1000
EmpfaengerFrame.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
EmpfaengerFrame.TopMargin = 6500
EmpfaengerFrame.LeftMargin = 2200
...
EmpfaengerFrame.HoriOrient = com.sun.star.text.HoriOrientation.NONE
EmpfaengerFrame.VertOrient = com.sun.star.text.VertOrientation.LINE_TOP
VersandTextCursor.gotoStart (False)
VersandText.Text.insertTextContent(VersandTextCursor, EmpfaengerFrame, False)
Leider wird so nur ein Textrahmen im normalen Text erstellt, die Abstände beziehen sich leider nicht auf die gesamte Seite. Der Textrahmen soll aber außerhalb des normalen Textes positioniert sein. Was mache ich falsch?
Es ist einfach des Empfängerfeld eines mittels Makro befüllten Briefes.

Zusatzfrage: Wie kann ich einen Textcursor erstellen und positionieren in einem bestehenden Textrahmen, wenn ich den Textrahmen nicht mittels Makro erstellt haben und mir somit die Referenzierung fehlt? (Der Textrahmen ist einfach schon vorhanden, wenn das Dokument geöffnet wird.)
Zuletzt geändert von Yad am Do, 21.12.2006 00:37, insgesamt 1-mal geändert.
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Was mache ich falsch?
Du gibst den falschen Verankerungstyp an:

EmpfaengerFrame.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER

ein am Zeichen verankerter Rahmen kann sich nur im Satzspiegel befinden.
Wie kann ich einen Textcursor erstellen und positionieren in einem bestehenden Textrahmen, wenn ich den Textrahmen nicht mittels Makro erstellt haben und mir somit die Referenzierung fehlt?
Du mußt etwas kennen was den Rahmen identifiziert, z.B. dessen Namen, oder es dürfte sich nur ein Rahmen im Dokument befinden.

Code: Alles auswählen

Sub nur_ein_Rahmen()
oFrames = ThisComponent.getTextFrames() 
oFrames(0).createTextCursor()
End Sub

Code: Alles auswählen

Sub Rahmen_hat_Name()
oFrames = ThisComponent.getTextFrames() 
For i = 0 To oFrames.Count-1
	If oFrames(i).Name = "Rahmen1" Then
		oFrames(i).createTextCursor()
	End if
Next i
End Sub


Gruß
Stephan
Yad
Beiträge: 6
Registriert: Mi, 20.12.2006 22:18

Wie heißt der richtige Verankerungstyp?

Beitrag von Yad »

Stephan hat geschrieben:
Was mache ich falsch?
Du gibst den falschen Verankerungstyp an:

EmpfaengerFrame.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER

ein am Zeichen verankerter Rahmen kann sich nur im Satzspiegel befinden.
Danke, Stefan. Ich hatte schon befürchtet, dass TextContentAnchorType schuld ist. Wo finde ich die möglichen (zulässigen) Typen? Im SO7.0-Handbuch steht leider nicht viel.

Bzw. was muss ich angeben, damit an der gesamten Seite verankert wird?
Yad
Beiträge: 6
Registriert: Mi, 20.12.2006 22:18

Die zweite Lösung war noch besser:

Beitrag von Yad »

Stephan hat geschrieben:
Du mußt etwas kennen was den Rahmen identifiziert, z.B. dessen Namen, oder es dürfte sich nur ein Rahmen im Dokument befinden.

Code: Alles auswählen

Sub Rahmen_hat_Name()
oFrames = ThisComponent.getTextFrames() 
For i = 0 To oFrames.Count-1
	If oFrames(i).Name = "Rahmen1" Then
		oFrames(i).createTextCursor()
	End if
Next i
End Sub
Danke, die zweite Variante war noch besser. Ich habe mit deiner Schleife einfach alle Rahmennahmen ermittelt und einfach in den Rahmen als Testdurchlauf geschrieben. Jetzt weiß ich, wie jeder RAhmen heißt und kann die bestehenden Rahmen direkt ansprechen.

Rahmennamen ermitteln:

Code: Alles auswählen

Sub Rahmennamen_in_Rahmen-schreiben
oFrames = VersandText.getTextFrames()
For i = 0 To oFrames.Count-1
   MsgBox "Frame=" & oFrames(i).Name
   FrameCursor = oFrames(i).createTextCursor()
   FrameCursor.gotoStart(False)
   FrameCursor.String = oFrames(i).Name
Next i
End Sub
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Wo finde ich die möglichen (zulässigen) Typen? Im SO7.0-Handbuch steht leider nicht viel.
in der IDL-Referenz, im Konkreten hier:
http://api.openoffice.org/docs/common/r ... rType.html



Gruß
Stephan
Antworten