[gelöst] Zeichenkette auswählen, wie?

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst] Zeichenkette auswählen, wie?

von Toxitom » Di, 11.07.2006 13:17

hey Gunther,

na, sieht doch schon gut aus. Deine Fragen hast du ja alle schon selbst beantwortet - klasse :-)

Gruss
Thomas

Hab jetzt eine Idee

von gunther.oo » Di, 11.07.2006 12:38

Hallo, hatte gerade eine Idee, welche auf den ersten Blick gut aussieht:
Wenn ich statt findFirst findNext verwende, kann ich als Startposition den Viewcursor angeben, und dann läuft die Suche auch schön rückwärts!
Erste Tests sehen, wie gesagt, richtig gut aus. :)
Gruß, Gunther

von gunther.oo » Di, 11.07.2006 12:16

Hallo Welt!

Habe mich aufgrund des Tips "Viewcursor/Textcursor" danach umgesehen und habe mir nun folgenden Code zusammengebastelt:

Code: Alles auswählen

sub SucheBisLeerzeichen
dim myDoc As Object
dim mySuche as Object
dim myTrefferPos as Object

myDoc=thisComponent
myViewCursor=myDoc.GetCurrentController.ViewCursor	'da bin ich beim Tippen
myTC=myDoc.text.createtextcursor() 					'wo steht der denn nach dem Erzeugen?
myTC.gotoRange(myViewCursor,False) 					'egal, stellen wir ihn dahin, wo wir ihn brauchen
mySuche = myDoc.createSearchDescriptor()
	With mySuche									' SearchDescriptor konfigurieren
		.SearchString = " "
		.SearchBackwards = False					'tja, ich will ab da suchen, wo ich gerade bin, und zwar rückwärts
		rem Funktioniert aber nicht! Suche klappt nur, wenn hier False steht
		.SearchCaseSensitive = False
		.SearchWords = False
		.SearchRegularExpression = False
		.SearchStyles = False
		.SearchSimilarity = False
	End With
myTrefferPos = myDoc.findFirst( mySuche )			' nach erstem Treffer suchen
myTC.gotoRange(myTrefferPos,True)					' von Schreibposition bis Fundstelle markieren
msgbox myTC.String									' jetzt etwas mit dem markierten Text anstellen; zu Testzwecken erstmal anzeigen...
   
 end sub
Wie in den Komentarzeilen vermerkt, kriege ich aber keine Ergebnisse, wenn .SearchBackwards auf True steht. Steht dort False, läuft die Suche und das Markieren fast wie gewünscht, allerdings wird die Suche am Anfang des Dokuments gestartet und ich bekomme entsprechend lange Strings...

Daraus ergibt sich meine Frage, wie kann ich den Startpunkt der Suche festlegen? Oder sollte ich hier ganz anders rangehen?

Danke für Tips! Gruß, Gunther

von gunther.oo » Mo, 10.07.2006 18:17

Hallo Thomas!
Danke für die schnelle Reaktion!

Wie mache ich's bis jetzt? Nur mit dem Makro-Recorder... :oops:
Hab noch nie Makros selber geschrieben, höchstens mal angepasst.

Ich habe diverse Dokumentaionen zu Makro-Code und OpenOffice Basic im Netz gefunden. Da ich aber nicht weiß, wie etwa passende Funktionen heißen, finde ich keine Hilfe.

Insofern wäre mir genau so wohl am besten geholfen, wie Du es bereits versucht hast:
Ich brauche ein paar Tips, womit es gehen könnte. Wie heißen z. B. die String-Funktionen oder -methoden, die ich benutzen könnte? Ich suche mir die Syntax dann schon zusammen.

Konkret habe ich folgendes vor: In meinem Text tauchen sehr viele verschiedene Formatierungen auf, die ich gern per Tastenkürzel zuweisen möchte. Als einfaches Beispiel habe ich etwa Makros für Indizes oben und unten per Makrorecorder erstellt:

Nach dem Schema: Zeichen nach links markieren - toggle Format tiefgestellt (an) - Schritt nach rechts - toggle Format tiefgestellt (aus).
Funktioniert prima, der Makro liegt direkt auf einer Funktionstaste; ich kann also super flüssig schreiben, ohne irgendwelche Schaltflächen oder Menüs anklicken zu müssen. Davon hätte ich jetzt gern mehr, muss aber nicht nur einzelne Zeichen, sondern zusammenhängende Zeichenfolgen auswählen.

Hier mal der Makro für einen unteren Index:

Code: Alles auswählen

sub IndexUnten
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Count"
args1(0).Value = 1
args1(1).Name = "Select"
args1(1).Value = true

dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SubScript", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(1) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Count"
args3(0).Value = 1
args3(1).Name = "Select"
args3(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args3())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SubScript", "", 0, Array())


end sub
Vielen Dank für weitere Tips!
Gruß, Gunther

von Toxitom » Mo, 10.07.2006 16:10

Hey Gunther,

wie machst du es denn jetzt? Bei so speziellen Fragen ist es immer wichtig, den schon bestehenden Code mit zu posten - dann können wir helfen.

Oder war es eher eine allgemeine Frage ob das geht?

Darauf gibt es eine einfache Antwort: Ja.

Je genauer du deine Wünsche und den Weg beschreiben kannst, um so eher gibt es eine Lösung.

Schuss ins "Blaue" da nicht ausprobiert:
Viewcursor holen, Methode gotoStartOfWord(true) aufrufen, schon sollte das Wort markiert sein.
Sollte die Methode jedoch auch bei einem Pluszeichen etc stoppen, dann bleibt nur Zeichen für Zeichen zu vergleichen, bis du ein Leerzeiche gefunden hast - per Schleife.

Gruss
Thomas

[gelöst] Zeichenkette auswählen, wie?

von gunther.oo » Mo, 10.07.2006 13:26

Hallo!
Ich möchte per Makro das Wort direkt vor dem Cursor auswählen (und dann weiterverarbeiten). Leider werden (auch bei [Umsch]+[Strg]+[Links]) als Wort nur die Buchstaben bis zu einem auftretenden anderen Zeichen, etwa + oder =, ausgewählt. Ich hätte aber lieber die Auswahl bis zum ersten auftretenden Leerzeichen o. ä., auch wenn Punkte oder sonstwas in der Zeichenkette stehen. Wie bekomme ich das hin?
Vielen Dank!

Nach oben