Mit dem Cursor an eine bestimmte Position springen
Moderator: Moderatoren
Mit dem Cursor an eine bestimmte Position springen
Moinsen,
ich möchte mit Hilfe eines Makros den Cursor an eine definierte Position im Dokument setzen. Ich hatte ein derartiges Makro bereits unter Word verfasst, wobei ich dort an der entsprechenden Position ein "Kontrollkästchen" gesetzt habe, zu dem ich anschließend mit Hilfe des Makros springen konnte. Das gleiche ist mir unter oo leider nicht gelungen. Welche Lösung gibt es dann?
Danke!
ich möchte mit Hilfe eines Makros den Cursor an eine definierte Position im Dokument setzen. Ich hatte ein derartiges Makro bereits unter Word verfasst, wobei ich dort an der entsprechenden Position ein "Kontrollkästchen" gesetzt habe, zu dem ich anschließend mit Hilfe des Makros springen konnte. Das gleiche ist mir unter oo leider nicht gelungen. Welche Lösung gibt es dann?
Danke!
Nachdem ich das Word-Dokument mit oo geöffnet hatte erschienen unter Bearbeiten-->Navigator-->Textmarken meine altbekannten "Kontrollkästchen". Über Makro aufzeichnen (zugegebenermaßen bin ich noch nicht in der Lage mir das gesamte Makro eigenständig zurechzuprogrammieren) habe ich dann versucht, auf diese Kontrollkästchen zu springen und das auch im Makro festzuhalten. Leider registriert das Makro nur das Öffnen des Navigators, nicht aber das anschließende Springen auf die Textmarke (weder über Doppelklick, noch über -->Navigation-->Textmarke-->Nächste Textmarke).
Dies hier ist das dabei generierte Makro:
sub test
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(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Navigator"
args1(0).Value = true
dispatcher.executeDispatch(document, ".uno:Navigator", "", 0, args1())
end sub
Dies hier ist das dabei generierte Makro:
sub test
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(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Navigator"
args1(0).Value = true
dispatcher.executeDispatch(document, ".uno:Navigator", "", 0, args1())
end sub
Dein Makro tut auch nichts in der Richtung was Du erreichen willst, es öffnet nur den Navigator. Allerdings weiß ich nicht was Du denn nun willst, zuerst war von einem Kontrollkästchen die Rede jetzt (auch) von einer Textmarke.
Ein Kontrollkästchen ist ein Draw-page-Objekt und eine Textmarke wohl etwas anderes. Du müßtest möglicherweise erstmal das (Word)Kontrollkästchen entfernen und ein Kontrollkästchen von OpenOffice einfügen und diesem einen eindeutigen Namen geben, dann könntest Du es mittels Code anspringen (den Code wirst Du aber wohl nicht ohne Weiteres aufzeichnen können).
Ich bin auch noch nicht sicher was passiert, wenn Du das Kontrollkästchen per Code selektierst. Was soll denn erreicht werden?
Gruß
Stephan
Ein Kontrollkästchen ist ein Draw-page-Objekt und eine Textmarke wohl etwas anderes. Du müßtest möglicherweise erstmal das (Word)Kontrollkästchen entfernen und ein Kontrollkästchen von OpenOffice einfügen und diesem einen eindeutigen Namen geben, dann könntest Du es mittels Code anspringen (den Code wirst Du aber wohl nicht ohne Weiteres aufzeichnen können).
Ich bin auch noch nicht sicher was passiert, wenn Du das Kontrollkästchen per Code selektierst. Was soll denn erreicht werden?
Gruß
Stephan
Wie ist denn die definierte Position gekennzeichnet? Befindet sie sich innerhalb eines normalen Fließtextes oder woanders (z.B. Textfeld, Tabelle, Aufzählung, Kopfzeile usw.)?Wie kann ich mit einem Makro an eine definierte (!) Position innerhalb eines Textes springen, um dann dort etwas einzufügen?
Kann doch eigentlich nicht so schwer sein?!?
Hier ist ein Beispiel, für den Zugriff auf ein Kontrollkästchen in einem Writer-Dokument, der Zugriff auf eine bestimmte Position eines Textes erfolgt jedoch gänzlich anders und ist abhängig davon wie Du meine obenstehenden Fragen beantwortest.
Code: Alles auswählen
Sub Checkbox_Demo
'dieser Code findet in einem Writer-Dokument eine
'vorhandene Checkbox und ändert deren Status
oDoc = ThisComponent
oView = oDoc.CurrentController
'nur ein Formular namens 'Standard' wird berücksichtigt
oForm = oDoc.DrawPage.Forms.GetByName("Standard")
'Checkbox hat Namen "CheckBox1"
For n = 0 to oForm.Count - 1
kaestchen = oForm.GetByIndex( n )
If kaestchen.Name = "CheckBox1" Then
If kaestchen.State = 0 then
kaestchen.State = 1
Else
kaestchen.State = 0
End If
End if
Next
End Sub
Stephan
Falls nur Fließtext vorliegt:
an Textmarke namens "test" den Text "Beispiel" eintragen:
den Cursor auf die Textmarke "test" setzen:
Gruß
Stephan
an Textmarke namens "test" den Text "Beispiel" eintragen:
Code: Alles auswählen
Sub Text_an_Textmarke_eintragen
thisComponent.getBookmarks().getByName("test").getAnchor.setString("Beispiel")
End Sub
Code: Alles auswählen
Sub mit_Cursor_zu_Textmarke_springen
Cursor = thiscomponent.CurrentController.getviewCursor()
Bookmark = thiscomponent.Bookmarks.getByName("test").Anchor
Cursor.gotorange(Bookmark, False)
End Sub
Stephan
Darf ich mich hier kurz dranhängen?
Ich stehe vor dem gleichen Problem, vor dem diefliege damals stand und habe in diesem Makro eine Lösung gesehen - und das Makro in mein Dokument integriert.
Wenn ich das Makro jetzt "von Hand" ausführe, funktioniert auch alles prima, solange der Cursor in Kopf-, Fusszeile oder im Body des Dokuments steht.
Ich habe aber zwischen Kopfzeile und Textkörper (Body) ein paar Formularfelder integriert, und will das Makro nutzen, um von einem dieser Formularfelder in den Body des Dokuments zu springen.
Und DAS funktioniert nicht.
Ich habe das Makro dem Formularfeld zur Ausführung beim Ereignis "Bei Fokusverlust" zugewiesen.
Nur wird die Textmarke, die ich anspringen will, eben NICHT angesprungen.
Der Cursor landet stattdessen im nächsten Formularfeld, als ob das Makro nichts tun würde.
Wo liegt das Problem, was muss ich ändern, damit es funktioniert?
Ich stehe vor dem gleichen Problem, vor dem diefliege damals stand und habe in diesem Makro eine Lösung gesehen - und das Makro in mein Dokument integriert.
Wenn ich das Makro jetzt "von Hand" ausführe, funktioniert auch alles prima, solange der Cursor in Kopf-, Fusszeile oder im Body des Dokuments steht.
Ich habe aber zwischen Kopfzeile und Textkörper (Body) ein paar Formularfelder integriert, und will das Makro nutzen, um von einem dieser Formularfelder in den Body des Dokuments zu springen.
Und DAS funktioniert nicht.
Ich habe das Makro dem Formularfeld zur Ausführung beim Ereignis "Bei Fokusverlust" zugewiesen.
Nur wird die Textmarke, die ich anspringen will, eben NICHT angesprungen.
Der Cursor landet stattdessen im nächsten Formularfeld, als ob das Makro nichts tun würde.
Wo liegt das Problem, was muss ich ändern, damit es funktioniert?