Seite 1 von 1

Feldbefehl für erstes Wort auf der Seite

Verfasst: So 14. Dez 2014, 13:04
von nitsnatsnok
Hallo,

ich arbeite an einem Dokument im Wörterbuchstil und suche nun eine Möglichkeit, jeweils bestimmte Wörter der Seite mittels Feldbefehl in der Kopfzeile anzeigen zu lassen, wie man es aus nahezu allen Wörterbüchern kennt: Normalerweise findet man da in der Kopfzeile links das erste Wort des ersten Eintrags und rechts das erste Wort des letzten Eintrags. Um das ganze nicht unnötig kompliziert zu gestalten, bin ich gern bereit, keinen Eintrag über zwei Seiten laufen zu lassen, somit entspricht zumindest das erste Wort der ersten Zeile dem, was in der Kopfzeile links stehen soll.

Hat jemand eine Idee, wie ich einzelne Wörter automatisiert in die Kopfzeile bekomme?

Edit 01: Am besten geeignet wäre ein Feldbefehl (oder Makro?), der das erste Wort des ersten bzw. letzten Absatzes der Seite anzeigt.

Edit 02: Unter http://www.dannenhoefer.de/faqstarbasic ... eifen.html ist ein Hinweis zu finden, wie ich rangehen könnte (fett gedruckt unsichere/fehlende Stellen):

sub absatz1
Doc = thisComponent
' hier sollte auf die aktuelle Seite zugegriffen werden statt aufs ganze Dokument:
seite = Doc.thisPage
Enum = seite.Text.createEnumeration
' hier sollte das erste Element von Enum ausgewählt werden:
TextElement = Enum.Element(0)
' hier sollte das erste Wort des in TextElement gespeicherten Absatzes extrahiert werden:
wortendpos = InStr(0,TextElement.string, ,20)
wort = left(TextElement.string,wortendpos)

' hier sollte dieses Wort an der Position des makroauslösenden Feldbefehls eingefügt werden:
ocursor=Doc.Text.createtextcursor()
Doc.Text.insertString(ocursor,wort,false)

end sub

bzw. fürs letzte Element von Enum = letzter Absatz:
TextElement = Enum.lastElement

Könnte evtl. auch http://www.dannenhoefer.de/faqstarbasic ... raphs.html hilfreich sein?

Re: Feldbefehl für erstes Wort auf der Seite

Verfasst: Mo 15. Dez 2014, 12:57
von mikele
Hallo,

einen Feldbefehl gibt es meines Wissens dafür nicht. Per Makro lässt sich das erste Wort des ersten und letzten Absatzes der Seite ermitteln (ich bastel' gerade noch).
Ein Problem wird noch die Dynamisierung der Kopfzeile sein, denn der Text der Kopfzeile erscheint ja auf allen Seiten. Eine Variante wäre, für jede Seite eine neue Seitenvorlage zu definieren.
Vielleicht weiß jemand Rat um es so zu lösen wie mit Kapitelüberschriften, die ja auch dynamisch eingebunden werden können.

Re: Feldbefehl für erstes Wort auf der Seite

Verfasst: Mo 15. Dez 2014, 14:11
von Rocko
nitsnatsnok hat geschrieben:ich arbeite an einem Dokument im Wörterbuchstil und suche nun eine Möglichkeit, jeweils bestimmte Wörter der Seite mittels Feldbefehl in der Kopfzeile anzeigen zu lassen, wie man es aus nahezu allen Wörterbüchern kennt
Dieses Thema wurde vor mehr als vier Jahren schon einmal diskutiert. Am Ergebnis dürfte sich noch nichts geändert haben.

Mit Kopfzeilen ist wohl nichts zu machen, weil es dafür keinen dynamischen Feldbefehl gibt. Statt mit lauter unterschiedlichen Seitenvorlagen mit Kopfzeile zu arbeiten, bietet es sich stattdessen an, einen Textrahmen verankert Am Absatz mit der Orientierung an der gesamten Seite als Autotext zu erstellen und die Stichworte dann zu markieren und in den Textrahmen bei gedrückter Maustaste zu kopieren.

Die anhängende Beispieldatei stammt noch von dem zitierten Thread und wurde durch einen Softwarefehler zwischenzeitlich einschließlich meiner Antwort gelöscht.

Re: Feldbefehl für erstes Wort auf der Seite

Verfasst: Mo 15. Dez 2014, 21:59
von mikele
Hallo,

so nun habe ich (vorerst) genug gebastelt.
@Rocko: Ich habe mir mal erlaubt, deine Datei als Basis zu nehmen.

Das Makro erzeugt (wenn nicht schon vorhanden) auf jeder Seite einen Textrahmen mit dem Namen "KopfrahmenX", wobei X die Seitennummer ist.
Dieser Textrahmen ist an der Seite verankert und befindet sich im oberen Randbereich.
In diesen Textrahmen wird dann das jeweils erste Wort des ersten und letzten Absatzes der Seite eingefügt.
Beim jedem Start des Makros werden die Daten in den Rahmen aktualisiert bzw. neue angelegt.

Re: Feldbefehl für erstes Wort auf der Seite

Verfasst: Do 18. Dez 2014, 12:19
von nitsnatsnok
Unglaublich! Super, ich danke euch beiden vielmals!

Leider funktioniert die Positionierung des Rahmens noch nicht ganz, im Beispieldokument wird er problemlos mit folgender Positionierung erstellt:
Horizontal von links um 2 cm zu Gesamte Seite
Vertikal von oben um 1 cm zu Gesamte Seite

In meiner Datei funktioniert das (aufgrund abweichender Standardeinstellungen?) leider nicht, der dort erstellte Rahmen richtet sich in beiden Dimensionen am Seitentextbereich statt an der gesamten Seite aus, außerdem positioniert er sich vertikal „oben“ (was keinen Änderungswert zulässt) statt „(um x cm) von oben“. Abhilfe schaffen die folgenden Zeilen:

Code: Alles auswählen

				.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
				.HoriOrientRelation = frame	'horizontale Positionierung zu „Gesamte Seite“
				.HoriOrientPosition = 2000		'2 cm von links
				.VertOrient = fromtop		'vertikale Positionierung „von oben“
				.VertOrientRelation = frame 	'vertikale Positionierung zu „Gesamte Seite“
				.VertOrientPosition = 1000		'1 cm von oben
Habt vielen Dank für eure schnelle und kompetente Hilfe!

Für andere hier noch einige Tipps zum Individualisieren des Makros:
Seiten bestimmen, auf denen die Textrahmen erstellt werden sollen, im Original (mit „i = 1 to n“) sind das alle, im Beispiel hier die Seiten 6–9.

Code: Alles auswählen

for i = 6 to 9
Breite des Textrahmens bestimmen – wenn er über die gesamte Breite des Seitentextbereichs gehen soll, entspricht das der Seitenbreite (21cm bei A4) abzüglich des rechten und linken Seitenrands, hier für 21cm - 1,5cm - 1,5cm = 18cm.
Unbedingt beachten: Für eine sinnvolle Positionierung des rechten Worts muss die tab(0).Position (weiter oben im Skript) auf denselben Wert gesetzt werden!

Code: Alles auswählen

tab(0).Position = 18000
.width = 18000	
Höhe des Textrahmens bestimmen, hier 0,5cm.

Code: Alles auswählen

.height = 500
Abstand zum linken Positionierungspunkt bestimmen (siehe oben) – wenn der Rahmen über die gesamte Breite des Seitentextbereichs gehen soll, entspricht das (bei Positionierung zur gesamten Seite) dem linken Seitenrand, hier 1,5cm.

Code: Alles auswählen

.HoriOrientPosition = 1500
Abstand zum oberen Positionierungspunkt bestimmen, sinnvoll ist der obere Seitenrand abzüglich 1cm, hier 0,5cm.

Code: Alles auswählen

.VertOrientPosition = 500

Re: Feldbefehl für erstes Wort auf der Seite

Verfasst: Sa 20. Dez 2014, 13:22
von mikele
Hallo,

ich habe mal noch ein bisschen weiter gebastelt.
Die Textrahmen werden nun entsprechend der Seitengröße und -rahmen erstellt. Die Logik ist insofern verändert, als dass die vorhandenen Kopftextrahmen gelöscht werden und druch neue ersetzt werden. Dadurch vereinfacht sich der Umgang, wenn in Nachhinein z. B. die Seitenränder des Dokuments verändert werden oder einzelne Seiten andere Formate haben.

Re: Feldbefehl für erstes Wort auf der Seite

Verfasst: So 21. Dez 2014, 00:18
von Pit Zyclade
Toll, was Du geschaffen hast, Mikele. Ich hab Deine letzte Datei bei mir ausprobiert und nach erneutem Durchlauf war auch alles so, wie nitsnatsnok sich das wünschte. Ich wußte ja, ihr Programmierexperten seid doch die Raffiniertesten.