Seite 1 von 1

Markierfelder im Text finden

Verfasst: Mo, 23.11.2015 19:10
von Colster
Hallo, liebe OpenOffice-Gemeinde,

ich habe einen Text, in dem vor einigen Textstellen Markierfelder im Text eingefügt sind (als Zeichen verankert). Wenn ich den Text jetzt Textportion für Textportion durchgehe, bekomme ich eine Textportion an der Stelle, an der das Markierfeld ist - ich kann aus dieser Textportion nicht das Control auslesen, und dementsprechend auch nicht, ob das Markierfeld gesetzt ist oder nicht.
Oder gibt es einen anderen Ansatz?
Ziel ist es, den angehakten Text in ein zweites Dokument zu kopieren und hier nur noch den Text zur Verfügung zu haben. (Textbausteine eignen sich für diesen Zweck nur bedingt.)
Tante Google hat mir bisher nicht weiterhelfen können.

Vielen Dank

Colster

Re: Markierfelder im Text finden

Verfasst: Mo, 23.11.2015 20:51
von F3K Total
Hi,
versuche es umgekehrt, durchsuche die Drawpage

Code: Alles auswählen

ThisComponent.drawpage.getbyindex()
nach den Markierfeldshapes und bestimme den zugehörigen Anchor.
Gruß R

Re: Markierfelder im Text finden

Verfasst: Mi, 25.11.2015 11:42
von Colster
Hallo F3K,

vielen Dank für Deine Antwort.
Noch eine Frage: Wie komme ich vom Anchor dann zum Text?

Mit Gruß

colster

Re: Markierfelder im Text finden

Verfasst: Mi, 25.11.2015 12:34
von Colster
Mein letzter Beitrag war ungenau:
Wie ich zum Text vom Anchor komme, ist nicht so schwierig.-> oShape.anchor.getText()
Aber wie finde ich den Text zwischen aufeinanderfolgenden Shapes?

Mit Gruß

Colster

Re: Markierfelder im Text finden

Verfasst: Mi, 25.11.2015 16:59
von F3K Total
Hi,
ich empfehle Dir die Verwendung eines Introspection-Tools wie MRI oder Xray
Damit kannst Du alle OOo-Dokumente hinsichtlich ihres Aufbaues durchleuchten.
Dann wirst du vermutlich, jetzt aus dem Kopf,

Code: Alles auswählen

Anchor.string
finden.
Gruß R

Re: Markierfelder im Text finden

Verfasst: Fr, 27.11.2015 20:21
von Colster
Vielen Dank für die Antworten, auch mit MRI habe ich keine Möglichkeit gefunden im Fließtext nur den Text zwischen den Markierfeldern zu identizieren. Ich habe es jetzt so gelöst, dass ich den Text in Frames gesteckt habe, im Frame ist jeweils ein Checkfeld - und über das Shape komme ich zum Control (oShape.Control.State gibt den Wert des Markierfeldes aus) und zum Frame (oShape.AnchorFrame() gibt den Frame an).
Nicht ganz so wie ich es wollte, geht aber auch.

Mit Gruß

Colster

Re: Markierfelder im Text finden

Verfasst: Sa, 28.11.2015 00:58
von F3K Total
Hi,
Colster hat geschrieben:keine Möglichkeit gefunden
habe geforscht, hier das Ergebnis, funktioniert bei mir:

Code: Alles auswählen

Sub getchkText
    dim oRanges(1,0) as Variant
    ncounter = 0
    oText = thisComponent.text
    oTextEnumeration = oText.createEnumeration
    While oTextEnumeration.hasmoreelements
       oPara = oTextEnumeration.nextelement
       oparaEnumeration = oPara.createEnumeration
          While oparaEnumeration.hasmoreelements
              oPortion = oparaEnumeration.nextelement
              oPortionContentEnumeration = oPortion.createContentEnumeration("com.sun.star.drawing.ControlShape")
              While oPortionContentEnumeration.hasmoreelements
                 oShape = oPortionContentEnumeration.nextelement
                 if oShape.Control.ServiceName = "stardiv.one.form.component.CheckBox" then
                     redim preserve oRanges(1,nCounter)
                     oRanges(0,nCounter) = oShape.Control.State
                     oRanges(1,nCounter) = oPara.Anchor
                     nCounter = nCounter + 1
                 endif
              wend
          wend
    wend
    oCursor = oText.CreateTextCursor
    for i = 0 to uBound(oRanges,2)-1
        if oRanges(0,i) = 1 then
            oAnchorStart = oRanges(1,i)
            oAnchorEnd = oRanges(1,i+1)
            oCursor.gotorange(oAnchorEnd,false)
            oCursor.gotoPreviousParagraph(false)
            oCursor.gotorange(oAnchorStart,true)
            if oCursor.CharColor = -1 then
                oCursor.CharColor = RGB(0,255,0)
            else
                oCursor.CharColor =  -1
            endif
         endif
    next i
    if oRanges(0,uBound(oRanges,2)) = 1 then
        oAnchorStart = oRanges(1,uBound(oRanges,2))
        oCursor.gotoEnd(false)
        oCursor.gotorange(oAnchorStart, true)
        if oCursor.CharColor = -1 then
            oCursor.CharColor = RGB(0,255,0)
        else
            oCursor.CharColor = -1
        endif
    endif
End Sub
Gruß R

Re: Markierfelder im Text finden

Verfasst: Sa, 28.11.2015 09:05
von Stephan
habe geforscht, hier das Ergebnis, funktioniert bei mir:
gut gemacht, die Markierfelder werden so gefunden.

Bei mir ist das Problem das die innere Schleife:

Code: Alles auswählen

While oPortionContentEnumeration.hasmoreelements
'...
Wend
immer doppelt durchlaufen wird.

Auch ist mir die Logik der Grünmarkierung des Textes nicht ganz klar, aber ich habe momentan nicht weiuter nachgedacht.

Was ich getan habe ist: ich habe ein Dokument mit mehrere Absätzen und 2 Checkboxen (in unterschiedlichen Absätzen) und markiere entweder nichts, oder Gesamttext oder mehrere einzelne Absätze. Das Makro macht dann immer den Absatz vor dem ersten Absatz mit Checkbox grün (wobei ich merke das wärend des Makrodurchlaufs zwioschenzeitlich auch andere Textteilke grün werdcen.

Wie auch immer, der wichtige Kern des Makros, finden der Checkboxen, funktioniert.


Gruß
Stephan

Re: Markierfelder im Text finden

Verfasst: Sa, 28.11.2015 09:20
von F3K Total
Hi,
es muss wohl zum Dokument passen, die Checkboxen am Absatzanfang als Zeichen verankert.
Der Fokus muss vor Ausführung des Makros von der gerade umgeschalteten Checkbox weg, damit der Status stimmt, anbei ein Beispiel.
Gruß R

Re: Markierfelder im Text finden

Verfasst: Do, 17.12.2015 10:34
von Colster
Vielen Dank für Deine Forschungsarbeit, F3K, damit kann ich jetzt mein Tool noch mal erheblich eleganter gestalten. (Die Frames zu positionieren war frickelig, Fließtext ist bestimmt besser).

Vielen Dank

Colster