Ermittlung der aktuellen Seitenvorlage
Moderator: Moderatoren
Ermittlung der aktuellen Seitenvorlage
Hallo,
ich versuche, ein Makro zu erstellen, bei dem ein Textrahmen bei geraden Seiten links, bei ungeraden rechts an den Seitenrand gesetzt werden soll. Dies entspricht - setzt man den Rahmen in OO über das Menü Einfügen->Rahmen - der Wahl "auf geraden Seiten spiegeln" und "Horizontal: innen, relativ zu Seitenrand außen".
Nun gibt's offenbar bei den möglichen Werten von com.sun.star.text.RelOrientation nur PAGE_FRAME_LEFT oder PAGE_FRAME_RIGHT, aber nicht PAGE_FRAME_OUTSIDE. Ich muss also diesen Wert abhängig davon machen, ob die aktuelle Seitenvorlage "Linke Seite" oder "Rechte Seite" ist.
Da ich dazu leider keine Informationen finden kann, bitte ich, mir solche zukommen zu lassen.
Herzlichen Dank im Voraus!
ich versuche, ein Makro zu erstellen, bei dem ein Textrahmen bei geraden Seiten links, bei ungeraden rechts an den Seitenrand gesetzt werden soll. Dies entspricht - setzt man den Rahmen in OO über das Menü Einfügen->Rahmen - der Wahl "auf geraden Seiten spiegeln" und "Horizontal: innen, relativ zu Seitenrand außen".
Nun gibt's offenbar bei den möglichen Werten von com.sun.star.text.RelOrientation nur PAGE_FRAME_LEFT oder PAGE_FRAME_RIGHT, aber nicht PAGE_FRAME_OUTSIDE. Ich muss also diesen Wert abhängig davon machen, ob die aktuelle Seitenvorlage "Linke Seite" oder "Rechte Seite" ist.
Da ich dazu leider keine Informationen finden kann, bitte ich, mir solche zukommen zu lassen.
Herzlichen Dank im Voraus!
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Ermittlung der aktuellen Seitenvorlage
Willkommen im Forum.
Setzt Du den (sichtbaren) Cursor auf die Seite:
Hilft Dir das weiter?
Setzt Du den (sichtbaren) Cursor auf die Seite:
Code: Alles auswählen
oCurrentController = ThisComponent.getCurrentController()
oViewCursor = oCurrentController.getViewCursor()
sPageStyleName = oViewCursor.PageStyleName
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Ermittlung der aktuellen Seitenvorlage
Ja, danke, das hilft mir zunächst sehr viel weiter.
Ich versuch's jetzt mit der Verzweigung.
Ich versuch's jetzt mit der Verzweigung.
Re: Ermittlung der aktuellen Seitenvorlage
Ja, danke vielmals, es hat alles geklappt. Warum allerdings der Frame immer am Anfang des Absatzes bleibt, auch wenn sich das Zeichen, an dem er verankert ist, durch Texteinfügungen davor in der Zeile verschiebt, ist mir unklar. Eigentlich sollte der Rahmen in der Zeile stehen, in der sich dieses Zeichen befindet. Wenn jemand hier eine Erklärung bzw. Lösung weiß, wäre ich dankbar.
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: AW: Ermittlung der aktuellen Seitenvorlage
Zeig' mal Code, dann können wir vielleicht was dazu sagen...
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Ermittlung der aktuellen Seitenvorlage
OK, hier ist er. Es ist allerdings mein erster Versuch in OOBasic, und Java kapier' ich schon gar nicht.
Ziel ist, den markierten Text gewissermaßen als Randbemerkung auf die Seite zu bringen, und zwar in genau der Zeile, in der er (zunächst) im Text steht.
Code: Alles auswählen
sub Marginale
Dim Doc As Object
Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Dim FrameCursor As Object
Doc = StarDesktop.CurrentComponent
oCurrentController = ThisComponent.getCurrentController()
oViewCursor = oCurrentController.getViewCursor()
Frame = ThisComponent.createInstance("com.sun.star.text.TextFrame")
oBorder = Frame.BottomBorder
With oBorder
.Color = 0
.InnerLineWidth = 0
.OuterLineWidth = 0
.LineDistance = 0
End With
With Frame
.BottomBorder = oBorder
.TopBorder = oBorder
.RightBorder = oBorder
.LeftBorder = oBorder
End With
Frame.Width = 2000
Frame.Height = 500
Frame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_CHARACTER
Frame.TopMargin = 0
Frame.BottomMargin = 0
Frame.LeftMargin = 0
Frame.RightMargin = 0
Frame.BorderDistance = 0
Frame.IsFollowingTextFlow = True
sPageStyleName = oViewCursor.PageStyleName
if sPageStyleName = "Right Page" then
Frame.HoriOrientRelation = com.sun.star.text.RelOrientation.FRAME_RIGHT
Frame.HoriOrient = com.sun.star.text.HoriOrientation.LEFT
else
Frame.HoriOrientRelation = com.sun.star.text.RelOrientation.FRAME_LEFT
Frame.HoriOrient = com.sun.star.text.HoriOrientation.RIGHT
endif
Frame.VertOrient = com.sun.star.text.VertOrientation.LINE_BOTTOM
ThisComponent.Text.insertTextContent(oViewCursor, Frame, False)
FrameCursor = Frame.CreateTextCursor()
if sPageStyleName = "Right Page" then
FrameCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.RIGHT
else
FrameCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.LEFT
endif
FrameCursor.charFontName = "Arial"
FrameCursor.charHeight = 10
FrameCursor.String = oViewCursor.String
oViewCursor.String = ""
end sub
Re: Ermittlung der aktuellen Seitenvorlage
Ich habe jetzt das Makro soweit fertig, dass es das tut, was ich von ihm erwarte.
Hier der Code:
Vielen Dank nochmals!
Hier der Code:
Code: Alles auswählen
sub Marginale
' Aufgabe: Der markierte Text wird als Randnotiz an den Seitenrand ausgelagert
' und im fließenden Text gelöscht.
Dim Doc As Object
Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Dim FrameCursor As Object
Doc = StarDesktop.CurrentComponent
oCurrentController = ThisComponent.getCurrentController()
oViewCursor = oCurrentController.getViewCursor()
Frame = ThisComponent.createInstance("com.sun.star.text.TextFrame")
' Der Rahmen soll ohne Umrandung dargestellt werden
oBorder = Frame.BottomBorder
With oBorder
.Color = 0
.InnerLineWidth = 0
.OuterLineWidth = 0
.LineDistance = 0
End With
With Frame
.BottomBorder = oBorder
.TopBorder = oBorder
.RightBorder = oBorder
.LeftBorder = oBorder
End With
With Frame
' Rahmen (20x5 mm) wird initialisiert und an der aktuellen Selection verankert
.Width = 2000
.Height = 500
.AnchorType = com.sun.star.text.TextContentAnchorType.AT_CHARACTER
.TopMargin = 0
.BottomMargin = 0
.LeftMargin = 0
.RightMargin = 0
.BorderDistance = 0
' Rahmen soll im Falle von Umformatierungen mit verschoben werden
.IsFollowingTextFlow = True
' Auf rechten Seiten soll der Randtext am rechten Seitenrand rechtsbündig,
' auf linken Seiten am linken Seitenrand linksbündig dargestellt werden
sPageStyleName = oViewCursor.PageStyleName
if sPageStyleName = "Right Page" then
sHoriOrientRelation = com.sun.star.text.RelOrientation.FRAME_RIGHT
sHoriOrient = com.sun.star.text.HoriOrientation.LEFT
sParaAdjust = com.sun.star.style.ParagraphAdjust.RIGHT
else
sHoriOrientRelation = com.sun.star.text.RelOrientation.FRAME_LEFT
sHoriOrient = com.sun.star.text.HoriOrientation.RIGHT
sParaAdjust = com.sun.star.style.ParagraphAdjust.LEFT
endif
.HoriOrientRelation = sHoriOrientRelation
.HoriOrient = sHoriOrient
' Bei vertikaler Orientierung relativ zum Ankerzeichen bleibt der Rahmen
' auf Höhe der Zeile des Ankerzeichens
.VertOrient = com.sun.star.text.VertOrientation.NONE
.VertOrientRelation = com.sun.star.text.RelOrientation.CHAR
.VertOrientPosition = 450
End With
' Der Rahmen wird jetzt eingefügt
ThisComponent.Text.insertTextContent(oViewCursor, Frame, False)
' Dem Rahmentext wird eine als existent vorausgesetzte Absatzvorlage
' "Marginale" zugewiesen; über diese lässt sich dann die genaue Jusiterung
' des Rahmens steuern
FrameCursor = Frame.CreateTextCursor()
With FrameCursor
.paraStyleName = "Marginale"
' Der selektierte Text wird in den Rahmen kopiert und im Text selbst gelöscht.
' Dadurch wird automatisch das folgende Zeichen zum Anker.
.String = oViewCursor.String
.paraAdjust = sParaAdjust
End With
oViewCursor.String = ""
end sub