2017-03-29 3 views
0

In Bezug auf Makros gibt es nur sehr wenige mit Impress (keine Aufzeichnung von Makros, keine Python-Skripte, nur Basic usw.) und sehr wenige Beispiele.Wie erstelle ich einen Einblendeffekt für die Auswahl?

Es gibt kein Beispiel, wie man "manuell" eine Textanimation erstellt. Ich habe eine gefunden here (6 Jahre alt) und es gibt eine Menge Informationen.

Bisher habe ich es geschafft, (1) nach einer Textanimation "Fadein" zu scannen, die schon da ist (2) nach allen anderen Textanimationen zu scannen und sie dann durch einen Klon des "Fadein" zu ersetzen "Animation:

sub MyFunction 
    ' -------------------------------------------------------------------- 
    ' (1) scan for a text animation "fadein" that is already there 
    effectNodeFadeIn = Null 
    doc = ThisComponent 
    numSlides = doc.getDrawPages().getCount() 
    slide = doc.drawPages(numSlides-1) 

    mainSequence = getMainSequence(slide)  
    clickNodes = mainSequence.createEnumeration() 
    while clickNodes.hasMoreElements() and IsNull(effectNodeFadeIn) 
     clickNode = clickNodes.nextElement() 

     groupNodes = clickNode.createEnumeration() 
     while groupNodes.hasMoreElements() and IsNull(effectNodeFadeIn) 
      groupNode = groupNodes.nextElement() 

      effectNodes = groupNode.createEnumeration() 
      while effectNodes.hasMoreElements() and IsNull(effectNodeFadeIn) 
       effectNode = effectNodes.nextElement() 
       ' ICIC 

       if effectNode.ImplementationName = "animcore::ParallelTimeContainer" then 
        if hasUserDataKey(effectNode, "preset-id") then 
         v = getUserDataValue(effectNode, "preset-id") 
         if v = "ooo-entrance-fade-in" then ' ooo-entrance-appear 
          effectNodeFadeIn = effectNode 
         end if 
        end if 
       end if 
       ' useless loop just in case I need it: 
       animNodes = effectNode.createEnumeration() 
       while animNodes.hasMoreElements() 
        animNode = animNodes.nextElement() 
       wend 
      wend 
     wend 
    wend 
    ' -------------------------------------------------------------------- 
    ' (2) scan for all other text animations, 
    ' and then remove them an replace them by a clone of the "fadein" animation 
    if not IsNull(effectNodeFadeIn) then 

     clickNodes = mainSequence.createEnumeration() 
     while clickNodes.hasMoreElements() 
      clickNode = clickNodes.nextElement() 

      groupNodes = clickNode.createEnumeration() 
      while groupNodes.hasMoreElements() 
       groupNode = groupNodes.nextElement() 

       effectNodes = groupNode.createEnumeration() 
       while effectNodes.hasMoreElements() 
        effectNode = effectNodes.nextElement() 
        ' ICIC 

        if effectNode.ImplementationName = "animcore::ParallelTimeContainer" then 
         if hasUserDataKey(effectNode, "preset-id") then 
          v = getUserDataValue(effectNode, "preset-id") 
          if v <> "ooo-entrance-fade-in" then ' ooo-entrance-appear 
           groupNode.removeChild(effectNode) 
           n = effectNodeFadeIn.createClone() 
           groupNode.appendChild(n) 

           ' useless loop just in case I need it: 
           animNodes = effectNode.createEnumeration() 
           while animNodes.hasMoreElements() 
            animNode = animNodes.nextElement() 
           wend 
          end if 
         end if 

        end if 
       wend 
      wend 
     wend 
    end if 
end sub 

function hasUserDataKey(node as Object, key as String) as Boolean 
    for each data in node.UserData 
     if data.Name = "node-type" then 
      hasUserDataKey = True 
      exit function 
     end if 
    next data 
    hasUserDataKey = False 
end function 

function getUserDataValue(node as Object, key as String) as Variant 
    for each data in node.UserData 
     if data.Name = key then 
      getUserDataValue = data.Value 
      exit function 
     end if 
    next data 
end function 

Wenn ich den Effekt klonen, ist es immer noch‚verbunden‘auf den ursprünglichen Text und dann wird das übergeordnete entfernt und ersetzt durch den‚FadeIn‘Text. Irgendeine Idee, wie man das korrigiert?

+0

Wo sind die Definitionen von 'hasUserDataKey()' und 'getUserDataValue()'? –

+0

Frage aktualisiert mit den 2 fehlenden Funktionen. –

Antwort

0

Es klingt wie Sie Text in einer Form ausgewählt haben, so Basic-Code verwenden, wie folgt:

Sub AddAnimation 
    xTextCursor = ThisComponent.CurrentController.Selection(0) 
    xText = xTextCursor.getText() 
    xText.TextEffect = com.sun.star.presentation.AnimationEffect.FADE_FROM_BOTTOM 
End Sub 

Oder in Python:

import uno 
from com.sun.star.presentation.AnimationEffect import FADE_FROM_BOTTOM 

def add_animation(): 
    oDoc = XSCRIPTCONTEXT.getDocument() 
    xTextCursor = oDoc.CurrentController.Selection.getByIndex(0) 
    xText = xTextCursor.getText() 
    xText.TextEffect = FADE_FROM_BOTTOM 

Aus Gründen nicht ganz klar zu mir, die Ergebnis ist Wipe statt Fade In.

Dokumentation ist um https://wiki.openoffice.org/wiki/Documentation/DevGuide/Drawings/Animations_and_Interactions. Die ShapeHelper Klasse von dieser Seite ist in ShapeHelper.java definiert.

+0

Und, danke, es ist ein guter Anfang Ich werde versuchen, nach der guten Konstante zu suchen, aber ich muss auch die Dauer auf "eine Sekunde" ändern ... irgendeine Idee? –

+0

Ich habe meine Frage mit meinen 2 großen Loops geändert, was fast funktioniert. –

+0

Ich bin immer noch auf der Suche nach dem Arbeiten Quellcode ... Ich fand das, wo die Codes fast funktioniert, es ist beeindruckend: Erstellung von Text, Erstellung von Effekten, alles scheint in Ordnung, aber die Dauer wird ignoriert ... Ich starte das Makro Es erzeugt alles, außer dass die Dauer ignoriert wird, aber wenn ich manuell auf die "Dauer" eines Textelements klicke und es manuell ändere, funktioniert es (es scheint, dass es einen anderen Knoten mit den guten Informationen entfernt und neu erstellt). .) Ich bin so nah, es ist sehr frustrierend ... http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FImpress%2FAnimation –

Verwandte Themen