Seite 1 von 1

ZUsammenhängenden Textbereich ermitteln welcher umrandet ist

Verfasst: Mo, 25.11.2019 11:04
von Stephan
Hallo,

in Writer befindet sich der sichtbare Cursor in einem Absatz des Fließtextes welcher eine Absatzumrandung hat.

Gibt es eine einfache Vorgehensweise alle Folgeabsätze zu ermitteln, welche ohne Unterbrechung ebenfalls umrandet sind?

Nebenbedingungen:
-wenn Umrandungen vorhanden sind, so sind diese verschmolzen
-Innerhalb der Absätze kann beliebig formatierter Text vorhanden sein, d.h. die Zeichenformatierung kann wechseln auch können Feldbefehle vorhanden sein


Mir fällt bisher nur ein bei jedem Absatz zu prüfen ob für Top-, Bottom-, Left- und Right-Border der Wert für OuterLineWidth ungleich Null ist.


Gruß
Stephan

Re: ZUsammenhängenden Textbereich ermitteln welcher umrandet ist

Verfasst: Mo, 25.11.2019 11:40
von Toxitom
Moin Stephan,

an sich reicht die Absatzeigenschaft "ParaIsConnectBorder" - steht sie auf True und der davorliegende Absatz besitzt einen Rahmen (links oder Rechts, oben oder unten) - so ist der Absatz ebenfalls "umrahmt" - also der Rahmen verschmolzen.

An sich ist die Iteration über die Absätze aber korrekt. Da wirst Du wohl jeden einzelnen prüfen müssen hinsichtlich des Rahmens. Wenn Du den ersten umrahmten Absatz gefunden hast (vielleicht, weil dort sowieso der Viewcursor steht?) . Ansonsten: Schleifen sind dein Freund *hihi*

VG
Tom

Re: ZUsammenhängenden Textbereich ermitteln welcher umrandet ist

Verfasst: Mo, 25.11.2019 12:09
von Stephan
Hallo Tom,
an sich reicht die Absatzeigenschaft "ParaIsConnectBorder" - steht sie auf True und der davorliegende Absatz besitzt einen Rahmen (links oder Rechts, oben oder unten) - so ist der Absatz ebenfalls "umrahmt" - also der Rahmen verschmolzen.
Stimmt. Ich war ungenau mit meiner Frage (es KÖNNTE nämlich auch nur ein Absatz umrandet sein, d.h. nach dem Absatz in welchem der Cursor steht folgt kein Umrandeter mehr).

Aber meine Überlegung das ich überhaupt alle Absätze ermitteln muss ist unnötig, denn die Situation ist so:

es gibt einen nicht-umrandeten Absatz, dort steht der V-Cursor, nach diesem Absatz kommt mindestens ein umrandeter Absatz. Der erste Absatz soll nun umrandet und mit möglichen Folgeabsätzen verschmolzen werden. Dazu muss ich ja garnicht wissen wieviele Folgeabsätze umrandet sind, sondern es genügt den Absatz mit dem unmittelbaren Folgeabsatz zu verschmelzen (so wie es Dir offensichtlich gleich klar war).

Der für meine Zwecke funktionierende Code ist:

Code: Alles auswählen

	v_cur = ThisComponent.GetCurrentController.ViewCursor
	t_cur = ThisComponent.Text.CreateTextCursor
	t_cur.GotoRange(v_cur, False)
	t_cur.gotoNextParagraph(False)

	'der nachfolgende Absatz enthält die passenden Werte für die Umrandung
	v_cur.TopBorder = t_cur.TopBorder
	v_cur.LeftBorder = t_cur.LeftBorder
	v_cur.RightBorder = t_cur.RightBorder
	v_cur.BottomBorder = t_cur.BottomBorder
	v_cur.TopBorderDistance = t_cur.TopBorderDistance
	v_cur.LeftBorderDistance = t_cur.LeftBorderDistance
	v_cur.RightBorderDistance = t_cur.RightBorderDistance
	v_cur.BottomBorderDistance = t_cur.BottomBorderDistance
	v_cur.ParaShadowFormat = t_cur.ParaShadowFormat
	'falls hinter dem ersten Absatz nur ein umrandeter Absatz ist 
	'KÖNNTE es sein das 'Verschmelzen' nicht aktiviert ist
	'Deshalb nicht auslesen, sondern direkt auf True setzen
	v_cur.ParaIsConnectBorder = True

Gruß
Stephan