Seite 1 von 1
Mit dem Cursor an eine bestimmte Position springen
Verfasst: Mi, 11.08.2004 19:02
von diefliege
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!
Verfasst: Mi, 11.08.2004 19:14
von Stephan
Das gleiche ist mir unter oo leider nicht gelungen
Wie bist Du denn bisher vorgegangen um das unter OpenOffice zu erreichen?
Gehen tut das in jedem Fall, aber es erschiene mir einfacher in Deinem bisherigen Code einen Fehler zu suchen, als das ganz neu zu machen.
Gruß
Stephan
Verfasst: Mi, 11.08.2004 19:28
von diefliege
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
Verfasst: Mi, 11.08.2004 21:02
von Stephan
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
Verfasst: Mi, 11.08.2004 22:22
von Stephan
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?!?
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.)?
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
Verfasst: Do, 12.08.2004 14:20
von Stephan
Falls nur Fließtext vorliegt:
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
den Cursor auf die Textmarke "test" setzen:
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
Gruß
Stephan
Verfasst: Do, 12.08.2004 16:28
von diefliege
Stephan, ich danke Dir, das ist genau das, was ich gesucht habe. Werde heute Abend mal versuchen, das in mein Dokument "einzupflegen".
Verfasst: Mo, 14.11.2005 18:14
von Baghee
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?