💚 BITTE helfen Sie uns NOCH HEUTE mit einer SPENDE 💚
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Aussetzer beim Setzen von Textformatierungen via Dispatcher

Alles zur Programmierung im LibreOffice.
Antworten
Dale Kirsten
Beiträge: 1
Registriert: Do 25. Jul 2019, 00:55

Aussetzer beim Setzen von Textformatierungen via Dispatcher

Beitrag von Dale Kirsten » Do 25. Jul 2019, 01:35

Hallo zusammen,

ich habe mir folgendes Makro aus vom Makrorekorder generiertem Code zusammengedengelt. Da ich einiges an Such-/Ersetzen-Listen habe, hier nur das Wesentliche in eine Sub gestopft (daher auch die Definition als Public). Es sucht alle Vorkommen des Suchbegriff search$ im Text, weist eine Text- und Hintergrundfarbe zu und macht ihn fett und groß. Ich habe es hier zur besseren Anschaulichkeit vereinfacht, normalerweise gebe ich per Parameterübergabe jedem Suchwort noch eine individuelle Farbe mit etc. pp.:

Code: Alles auswählen

Public search_only_param(21) as new com.sun.star.beans.PropertyValue

sub get_access
''''Code aus dem Makrorekorder
	rem get access to the document
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
End Sub

Sub textcolor_big_bold_test (search$)
''''Code aus dem Makrorekorder adaptiert

	If search_only_param(0).Name <> "SearchItem.StyleFamily"  Then
		GoSub INIT
		End If
	search_only_param(11).Value = search$
	dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, search_only_param())

	dim args1(0) as new com.sun.star.beans.PropertyValue
	
	args1(0).Name = "FontColor"
	args1(0).Value = 15645440
	dispatcher.executeDispatch(document, ".uno:CharColorExt", "", 0, args1())
	
	rem ----------------------------------------------------------------------
	args1(0).Name = "BackColor"
	args1(0).Value = 7798903
	dispatcher.executeDispatch(document, ".uno:CharBackgroundExt", "", 0, args1())

	rem ----------------------------------------------------------------------
	args1(0).Name = "Bold"
	args1(0).Value = true
	dispatcher.executeDispatch(document, ".uno:Bold", "", 0, args1())
	
	rem ----------------------------------------------------------------------
	dim args3(2) as new com.sun.star.beans.PropertyValue
	args3(0).Name = "FontHeight.Height"
	args3(0).Value = 18
	args3(1).Name = "FontHeight.Prop"
	args3(1).Value = 100
	args3(2).Name = "FontHeight.Diff"
	args3(2).Value = 0
	dispatcher.executeDispatch(document, ".uno:FontHeight", "", 0, args3())
	
	Exit Sub
	
	INIT:
		search_only_param(0).Name = "SearchItem.StyleFamily"
		search_only_param(0).Value = 2
		search_only_param(1).Name = "SearchItem.CellType"
		search_only_param(1).Value = 0
		search_only_param(2).Name = "SearchItem.RowDirection"
		search_only_param(2).Value = true
		search_only_param(3).Name = "SearchItem.AllTables"
		search_only_param(3).Value = false
		search_only_param(4).Name = "SearchItem.SearchFiltered"
		search_only_param(4).Value = false
		search_only_param(5).Name = "SearchItem.Backward"
		search_only_param(5).Value = false
		search_only_param(6).Name = "SearchItem.Pattern"
		search_only_param(6).Value = false
		search_only_param(7).Name = "SearchItem.Content"
		search_only_param(7).Value = false
		search_only_param(8).Name = "SearchItem.AsianOptions"
		search_only_param(8).Value = false
		search_only_param(9).Name = "SearchItem.AlgorithmType"
		search_only_param(9).Value = 0
		search_only_param(10).Name = "SearchItem.SearchFlags"
		search_only_param(10).Value = 0
		search_only_param(11).Name = "SearchItem.SearchString"
		search_only_param(11).Value = ""
		search_only_param(12).Name = "SearchItem.ReplaceString"
		search_only_param(12).Value = ""
		search_only_param(13).Name = "SearchItem.Locale"
		search_only_param(13).Value = 255
		search_only_param(14).Name = "SearchItem.ChangedChars"
		search_only_param(14).Value = 2
		search_only_param(15).Name = "SearchItem.DeletedChars"
		search_only_param(15).Value = 2
		search_only_param(16).Name = "SearchItem.InsertedChars"
		search_only_param(16).Value = 2
		search_only_param(17).Name = "SearchItem.TransliterateFlags"
		search_only_param(17).Value = 256
		search_only_param(18).Name = "SearchItem.Command"
		search_only_param(18).Value = 1
		search_only_param(19).Name = "SearchItem.SearchFormatted"
		search_only_param(19).Value = false
		search_only_param(20).Name = "SearchItem.AlgorithmType2"
		search_only_param(20).Value = 1
		search_only_param(21).Name = "Quiet"
		search_only_param(21).Value = true
		Return
End Sub	
Das Ganze verwende ich zum Hervorheben von Schlüsselwörtern in einem Text, um diesen nach Themen auswerten zu können und rufe es wie folgt auf:

Code: Alles auswählen

Sub Woerter_markieren
	get_access
	
	textcolor_big_bold_test ("wer")
	textcolor_big_bold_test ("wie")
	textcolor_big_bold_test ("was")
	textcolor_big_bold_test ("blablubb")
	textcolor_big_bold_test ("wieso")
	textcolor_big_bold_test ("weshalb")
	textcolor_big_bold_test ("warum")
End Sub
Das funktioniert auch so weit ganz gut, ABER: Wenn ein Suchbegriff im Text nicht vorhanden ist, wirds danach nicht mehr bunt.

Beispiel: Gegeben sei ein Text, in dem die Wörter "wer", "wie", "was", "wieso", "weshalb" und "warum" vorkommen, "blablubb" jedoch nicht.
Das Ergebnis ist, dass "wer", "wie" und "was" bunt, groß und fett sind, "wieso", "weshalb" und "warum" aber nur noch fett und groß, jedoch nicht bunt.

Ich bastel schon eine Weile mit Makros und hab auch ein anderweitig ein paar Grunderfahrungen in der Programmierung, bewege mich hier aber eher auf dem Niveau eines Script-Kiddies als auf dem des professionellen Coders… ;)
Daher nun MEINE FRAGEN:
* Kann ich irgendwie bewirken, dass es auch nach Nichtfund beim nächsten Treffer wieder bunt wird?
* Liegt der Fehler irgendwo systematisch in meinem Code oder bin ich auf einen Bug im Dispachter gestolpert?

Freu mich auf Antwort und Ideen! :)
LG,
Dale

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten