setzen Cursor auf textlose Überschrift?

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

Moderator: Moderatoren

tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

setzen Cursor auf textlose Überschrift?

Beitrag von tommy »

Hallo,
In einem Writer Dokument habe ich eine Zeile, bei der existiert eine Absatzvorlage als Überschrift (z.B Überschrift 1). Die Zeile ist leer.
Wie macht man, damit der Cursor an die Stelle springt und eine MsgBox erscheint?
Ich bin dankbar für eure Antwort.

Gruß

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

Re: setzen Cursor auf textlose Überschrift?

Beitrag von Stephan »

tommy hat geschrieben:Hallo,
In einem Writer Dokument habe ich eine Zeile, bei der existiert eine Absatzvorlage als Überschrift (z.B Überschrift 1). Die Zeile ist leer.
Wie macht man, damit der Cursor an die Stelle springt und eine MsgBox erscheint?
Ich bin dankbar für eure Antwort.

Gruß

Tommy

Code: Alles auswählen

Sub Main
Dim Doc As Object
Dim Cursor As Object
Dim Proceed As Boolean
Doc = StarDesktop.CurrentComponent
Cursor1 = Doc.Text.createTextCursor
Cursor1.gotoStart(False)
weiter = True
Do
   If Cursor1.supportsService("com.sun.star.style.ParagraphProperties") Then
      'Name der Überschriftenvorlage abändern, ACHTUNG: Überschrift1
      'heißt z.B. "Heading 1".
      'Eigene Vorlagen heißen natürlich so wie der vergebene Name.
      If Cursor1.ParaStyleName = "Name der Überschriftenvorlage" Then
         Cursor1.gotoEndOfParagraph(True)
         xxx = Cursor1.String
         If xxx = "" Then
            Cursor = Doc.CurrentController.getviewCursor()
            Cursor.GotoRange(Cursor1,False)
            Msgbox "Bin hier!"
         End if
      End if
   End If
   weiter = Cursor1.gotoNextParagraph(false)
Loop While weiter
End Sub
Gruß
Stephan
tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

Beitrag von tommy »

Hi Stephan,
danke für Dein Code. Nachdem ich auf OK von MsgBox geklickt habe, sehe ich den Cursor nicht.
Frage: kann man so machen, dass man nachdem Klick auf OK die Cursor sehen kann? Wenn das nicht geht, dann habe ich folgendes überlegt: An der Stelle, wo textlose Überschrift ist, soll ein Text z.B "diese Zeile soll gelöscht werden" hinzugefügt werden. Ist das möglich?

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

Beitrag von Stephan »

Nachdem ich auf OK von MsgBox geklickt habe, sehe ich den Cursor nicht.
Frage: kann man so machen, dass man nachdem Klick auf OK die Cursor sehen kann?
Das sollte gehen, da der Code extra den Cursor sichtbar macht, bei mir geht das auch. Versuche doch mal diesen Teil des Codes:

Code: Alles auswählen

If xxx = "" Then 
   Cursor = Doc.CurrentController.getviewCursor() 
   Cursor.GotoRange(Cursor1,False) 
   Msgbox "Bin hier!" 
End if


so zu schreiben, dann müßte es definitiv gehen:

Code: Alles auswählen

If xxx = "" Then 
   Msgbox "Bin hier!"
   Cursor = Doc.CurrentController.getviewCursor() 
   Cursor.GotoRange(Cursor1,False) 
End if 
An der Stelle, wo textlose Überschrift ist, soll ein Text z.B "diese Zeile soll gelöscht werden" hinzugefügt werden. Ist das möglich?
Na klar:

Code: Alles auswählen

Sub Main
Dim Doc As Object
Dim Cursor As Object
Dim Proceed As Boolean
Doc = StarDesktop.CurrentComponent
Cursor1 = Doc.Text.createTextCursor
Cursor1.gotoStart(False)
weiter = True
Do
   If Cursor1.supportsService("com.sun.star.style.ParagraphProperties") Then
      'Name der Überschriftenvorlage abändern, ACHTUNG: Überschrift1
      'heißt z.B. "Heading 1".
      'Eigene Vorlagen heißen natürlich so wie der vergebene Name.
      If Cursor1.ParaStyleName = "Name der Überschriftenvorlage" Then
         Cursor1.gotoEndOfParagraph(True)
         xxx = Cursor1.String
         If xxx = "" Then
            Cursor1.SetString("diese Zeile soll gelöscht werden")
            Msgbox "Test"
         End if
      End if
   End If
   weiter = Cursor1.gotoNextParagraph(false)
Loop While weiter
End Sub

Gruß
Stephan
tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

Beitrag von tommy »

Hi Stephan,
danke für die schnelle Antwort. Durch folgende Änderung an den Code ist die Cursor immer noch nicht zu sehen

Code: Alles auswählen

If xxx = "" Then 
   Cursor = Doc.CurrentController.getviewCursor() 
   Cursor.GotoRange(Cursor1,False) 
   Msgbox "Bin hier!" 
End if
Kann das sein, das es daran liegt, dass der Dokument unaktiv ist und der MsgBox aktiv ist?
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Kann das sein, das es daran liegt, dass der Dokument unaktiv ist und der MsgBox aktiv ist?
Solange die MsgBox offen ist kannst Du im Dokument nichts bearbeiten und deshalb ist auch kein Cursor zu sehen, aber ich dachte es geht darum das:
Nachdem ich auf OK von MsgBox geklickt habe, sehe ich den Cursor nicht.
Wenn Du die MsgBox schließt muß der Cursor zu sehen sein.

Wenn die MsgBox offen ist und Du einen Cursor sehen willst, sehe ich keinen Weg - außer dort wo der Cursor wäre irgendetwas einzutragen oder eine Hervorhebung oder Ähnliches, das hast Du schon selbst vorgeschlagen.

Gruß
Stephan
tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

Beitrag von tommy »

Wenn Du die MsgBox schließt muß der Cursor zu sehen sein.
Er ist bei mir nicht zu sehen.
Ich habe in dem Dokument einen Knopf, wenn er geklickt wird, wird ein Makro aufgerufen.
Ich benutze OOo1.1.2
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Ich habe in dem Dokument einen Knopf, wenn er geklickt wird, wird ein Makro aufgerufen.
Sobald Du die Schaltfläche drückst erhält sie den Fokus (Beschriftung der Schaltfläche ist von punktierten Rahmen umgeben) und der Text Deines Dokuments verliert selbigen, ich weiß nicht wie ich das ändern soll (*).
Starte das Makro aus dem Menü oder von einer Menüschaltfläche aus oder mit Tastenkombination.

(*)ich habe hierzu einen neuen thread eröffnet

Gruß
Stephan
tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

Beitrag von tommy »

Hi Stephan,
ich habe den Code etwas geändert und starte das Makro aus dem Menü.
Jetzt kann ich den Cursor sehen. Ich habe das MsgBox am Ende erscheinen lassen, damit ich den Cursor sehen kann. Folgendes ist der Code:

Code: Alles auswählen

Cursor1 = ThisComponent.Text.createTextCursor 
Cursor1.gotoStart(False) 
weiter = True 
Do 
  If Cursor1.supportsService("com.sun.star.style.ParagraphProperties") Then
    If Left(Cursor1.ParaStyleName, 7) = "Heading" Then
       Cursor1.gotoEndOfParagraph(True) 
       HeadingText = Cursor1.String 
       If HeadingText = "" Then
          wait 500
          Cursor2 = ThisComponent.CurrentController.getviewCursor() 
          Cursor2.GotoRange(Cursor1,false)
          StructurError=true
       End if 
     End if 
   End If 
   weiter = Cursor1.gotoNextParagraph(false) 
Loop While weiter

if StructurError then
  wait 500
  Msgbox "An der Stelle(n), wo der Cursor eben zu sehen war." &_
     " ist eine Überschriftebene formatiert."
end if
Gruß
Tommy
Antworten