ZUsammenhängenden Textbereich ermitteln welcher umrandet ist

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

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

ZUsammenhängenden Textbereich ermitteln welcher umrandet ist

Beitrag 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
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: ZUsammenhängenden Textbereich ermitteln welcher umrandet ist

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: ZUsammenhängenden Textbereich ermitteln welcher umrandet ist

Beitrag 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
Antworten