Verwalten von Folienübergängen in Präsentationen mit C++
Übersicht
Folienübergänge bestimmen, wie Folien während einer Bildschirmpräsentation erscheinen. Mit Aspose.Slides for C++ können Sie für jede Folie einen Übergangseffekt auswählen, den Fortschritt per Mausklick oder Timer konfigurieren und optionsspezifische Einstellungen für einen Effekt anpassen. Dieser Artikel verwendet C++‑Beispiele, um Übergänge anzuwenden, exakte Übergangsdauern festzulegen, Folienzeiten zu verwalten und einen Morph‑Übergang zwischen zwei Folien zu erstellen. Die Beispiele zeigen außerdem, wie die Einstellungen in einer PPTX‑Datei gespeichert werden.
Folienübergang hinzufügen
Um einen Übergang anzuwenden, laden Sie eine Präsentation mit der Presentation‑Klasse und greifen über get_SlideShowTransition auf die Übergangseinstellungen einer Folie zu. Rufen Sie set_Type mit einem Wert aus der Aufzählung TransitionType auf und speichern Sie anschließend die Präsentation.
Im folgenden Beispiel wird ein Circle‑Übergang auf die erste Folie und ein Comb‑Übergang auf die zweite Folie angewendet. Verwenden Sie eine Datei input.pptx mit mindestens zwei Folien.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ISlideShowTransition.h>
#include <DOM/SlideShowTransition/TransitionType.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
using namespace System;
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SlideShow;
auto presentation = MakeObject<Presentation>(u"input.pptx");
if (presentation->get_Slides()->get_Count() >= 2)
{
presentation->get_Slide(0)->get_SlideShowTransition()->set_Type(TransitionType::Circle);
presentation->get_Slide(1)->get_SlideShowTransition()->set_Type(TransitionType::Comb);
presentation->Save(u"slide-transitions.pptx", SaveFormat::Pptx);
}
else
{
Console::WriteLine(u"The input presentation must contain at least two slides.");
}
presentation->Dispose();
Erweiterten Folienübergang hinzufügen
Sie können konfigurieren, wie lange eine Folie auf dem Bildschirm bleibt und ob ein Mausklick die Präsentation voranbringt. Die folgenden Methoden steuern dieses Verhalten:
- set_AdvanceOnClick ermöglicht das Voranschreiten durch Mausklick.
- set_AdvanceAfter aktiviert das automatische Voranschreiten.
- set_AdvanceAfterTime legt die Verzögerung vor dem automatischen Voranschreiten in Millisekunden fest.
Aktivieren Sie sowohl Klick‑ als auch Zeit‑Fortschritt, damit der Betrachter entweder mit einem Klick weitergehen oder auf den Timer warten kann. Um nur den Timer zu verwenden, rufen Sie set_AdvanceOnClick mit false auf. Die Verzögerung steuert, wann die Präsentation fortschreitet; sie legt nicht die Dauer des visuellen Übergangseffekts fest.
Dieses Beispiel weist den ersten drei Folien unterschiedliche Effekte zu und aktiviert das automatische Voranschreiten nach 3, 5 bzw. 7 Sekunden. Mausklicks können diese Folien ebenfalls voranbringen. Verwenden Sie eine Datei input.pptx mit mindestens drei Folien.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ISlideShowTransition.h>
#include <DOM/SlideShowTransition/TransitionType.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
using namespace System;
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SlideShow;
auto presentation = MakeObject<Presentation>(u"input.pptx");
if (presentation->get_Slides()->get_Count() >= 3)
{
auto firstTransition = presentation->get_Slide(0)->get_SlideShowTransition();
firstTransition->set_Type(TransitionType::Circle);
firstTransition->set_AdvanceOnClick(true);
firstTransition->set_AdvanceAfter(true);
firstTransition->set_AdvanceAfterTime(3000);
auto secondTransition = presentation->get_Slide(1)->get_SlideShowTransition();
secondTransition->set_Type(TransitionType::Comb);
secondTransition->set_AdvanceOnClick(true);
secondTransition->set_AdvanceAfter(true);
secondTransition->set_AdvanceAfterTime(5000);
auto thirdTransition = presentation->get_Slide(2)->get_SlideShowTransition();
thirdTransition->set_Type(TransitionType::Zoom);
thirdTransition->set_AdvanceOnClick(true);
thirdTransition->set_AdvanceAfter(true);
thirdTransition->set_AdvanceAfterTime(7000);
presentation->Save(u"advanced-transitions.pptx", SaveFormat::Pptx);
}
else
{
Console::WriteLine(u"The input presentation must contain at least three slides.");
}
presentation->Dispose();
Um zu prüfen, ob das zeitgesteuerte Voranschreiten aktiviert ist, rufen Sie get_AdvanceAfter auf. Eine gespeicherte Verzögerung allein zeigt nicht an, dass der Timer aktiv ist.
Das nächste Beispiel öffnet die oben gespeicherte Datei, meldet jeden aktivierten Timer und deaktiviert das automatische Voranschreiten für Folien mit einer Verzögerung von mehr als zwei Sekunden. Für diese Folien wird der Mausklick wieder aktiviert und die aktualisierten Einstellungen werden gespeichert.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ISlideShowTransition.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
using namespace System;
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
auto presentation = MakeObject<Presentation>(u"advanced-transitions.pptx");
for (auto&& slide : presentation->get_Slides())
{
auto transition = slide->get_SlideShowTransition();
if (transition->get_AdvanceAfter())
{
Console::WriteLine(u"Slide {0}: advance after {1} ms.", slide->get_SlideNumber(), transition->get_AdvanceAfterTime());
if (transition->get_AdvanceAfterTime() > 2000)
{
transition->set_AdvanceAfter(false);
transition->set_AdvanceOnClick(true);
}
}
}
presentation->Save(u"adjusted-transitions.pptx", SaveFormat::Pptx);
presentation->Dispose();
Übergangszeit präzise steuern
Verwenden Sie set_Duration, um die exakte Länge eines Übergangseffekts in Millisekunden festzulegen. Die Methode get_SlideShowTransition der Folie gibt diese Einstellungen über ISlideShowTransition frei:
| Methode | Zweck |
|---|---|
| set_Duration | Legt die Dauer des eigentlichen Übergangseffekts in Millisekunden fest. |
| set_AdvanceAfterTime | Legt die Verzögerung fest, bevor die Folie automatisch voranschreitet, in Millisekunden. Rufen Sie set_AdvanceAfter mit true auf, um diesen Timer zu aktivieren. |
| set_Speed | Wählt eine vordefinierte Geschwindigkeitskategorie aus TransitionSpeed: Slow, Medium oder Fast. Sie wird verwendet, wenn keine exakte Dauer angegeben wird. |
set_Duration steuert nur den Übergangseffekt; sie bestimmt nicht, wie lange die Folie sichtbar bleibt. Konfigurieren Sie die Verzögerung für das automatische Voranschreiten separat. Wenn keine explizite Dauer gesetzt ist, ermittelt Aspose.Slides die Effektdauer aus dem Übergangstyp und dem von get_Speed zurückgegebenen Wert.
Die gleiche Dauer auf jede Folie anwenden
Für ein gleichmäßiges Tempo wenden Sie denselben Effekt und dieselbe exakte Dauer auf jede Folie an. Dieses Beispiel lädt input.pptx, wählt Fade aus TransitionType und gibt jedem Übergang eine Dauer von 750 Millisekunden. Es aktiviert das automatische Voranschreiten nach 5000 Millisekunden und deaktiviert das Voranschreiten per Mausklick, dann wird das Ergebnis als PPTX gespeichert.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ISlideShowTransition.h>
#include <DOM/SlideShowTransition/TransitionType.h>
#include <Export/SaveFormat.h>
using namespace System;
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SlideShow;
auto presentation = MakeObject<Presentation>(u"input.pptx");
for (auto&& slide : presentation->get_Slides())
{
auto transition = slide->get_SlideShowTransition();
transition->set_Type(TransitionType::Fade);
transition->set_Duration(750);
// Konfigurieren Sie das automatische Voranschreiten unabhängig von der Dauer des Effekts.
transition->set_AdvanceAfter(true);
transition->set_AdvanceAfterTime(5000);
transition->set_AdvanceOnClick(false);
}
presentation->Save(u"precise-transitions.pptx", SaveFormat::Pptx);
presentation->Dispose();
Verschiedene Dauern für einzelne Folien festlegen
Unterschiedliche Folien können unterschiedliche Effektdauern verwenden. Zum Beispiel kann für eine Titelfolie ein kurzer Übergang und für eine Abschnittseinleitung ein längerer Übergang verwendet werden. Dieses Beispiel setzt 500 Millisekunden für die erste Folie und 1200 Millisekunden für die zweite. Verwenden Sie eine Datei input.pptx mit mindestens zwei Folien.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ISlideShowTransition.h>
#include <DOM/SlideShowTransition/TransitionType.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
using namespace System;
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SlideShow;
auto presentation = MakeObject<Presentation>(u"input.pptx");
if (presentation->get_Slides()->get_Count() >= 2)
{
auto firstTransition = presentation->get_Slide(0)->get_SlideShowTransition();
firstTransition->set_Type(TransitionType::Fade);
firstTransition->set_Duration(500);
auto secondTransition = presentation->get_Slide(1)->get_SlideShowTransition();
secondTransition->set_Type(TransitionType::Push);
secondTransition->set_Duration(1200);
presentation->Save(u"individual-transition-durations.pptx", SaveFormat::Pptx);
}
else
{
Console::WriteLine(u"The input presentation must contain at least two slides.");
}
presentation->Dispose();
Übergänge mit animierter Ausgabe koordinieren
Beim Erstellen eines animated GIF, einer HTML5-Präsentation oder eines Videos sollten Sie die exakten Übergangszeiten vor dem Export festlegen, um das gewünschte Tempo zu treffen. Verwenden Sie beispielsweise einen 600-milliseconden Fade zwischen Szenen und passen Sie die Voranschreitverzögerung jeder Folie separat an, um Zeit für die Erzählung oder den Inhalt zu ermöglichen.
Für GIF und Video koordinieren Sie die Bildrate des Outputs mit der Effektdauer: 600 Millisekunden entsprechen 18 Bildern bei 30 Bildern pro Sekunde. In HTML5 aktivieren Sie animierte Übergänge in den Export‑Einstellungen. Prüfen Sie die vom gewählten Exportformat unterstützten Effekte und Zeitoptionen und prüfen Sie die Ausgabe, um die Synchronisation zu bestätigen.
Eine vorhandene Übergangsdauer auslesen
Rufen Sie get_Duration auf, bevor Sie den Übergang ändern, um festzustellen, ob ein expliziter Wert gespeichert ist. Ein Wert von -1 bedeutet, dass keine explizite Dauer gesetzt ist; ein nicht negativer Wert gibt die gespeicherte Dauer in Millisekunden an. Dieser nicht gesetzte Wert ist nicht die berechnete Wiedergabedauer: Aspose.Slides verwendet den Übergangstyp und den von get_Speed zurückgegebenen Wert, um diese Dauer zu bestimmen. Das Festlegen eines Übergangstyps kann eine Dauer initialisieren, daher sollten Sie zuerst die ursprünglichen Einstellungen prüfen.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ISlideShowTransition.h>
#include <DOM/SlideShowTransition/TransitionType.h>
#include <DOM/SlideShowTransition/TransitionSpeed.h>
#include <system/console.h>
using namespace System;
using namespace Aspose::Slides;
auto presentation = MakeObject<Presentation>(u"input.pptx");
for (auto&& slide : presentation->get_Slides())
{
auto transition = slide->get_SlideShowTransition();
auto duration = transition->get_Duration();
if (duration >= 0)
{
Console::WriteLine(u"Slide {0}: stored transition duration is {1} ms.", slide->get_SlideNumber(), duration);
}
else
{
Console::WriteLine(u"Slide {0}: no explicit duration; timing depends on {1} and {2}.", slide->get_SlideNumber(), transition->get_Type(), transition->get_Speed());
}
}
presentation->Dispose();
Morph‑Übergang
Der Morph‑Übergang animiert Änderungen zwischen Objekten auf aufeinanderfolgenden Folien. Um einen einfachen Morph‑Effekt zu erzeugen, duplizieren Sie eine Folie, verschieben oder skalieren ein Objekt auf der Kopie und wenden den Morph‑Übergang auf die zweite Folie an. Dadurch erhalten die zugehörigen Objekte eine Animation zwischen ihrem ursprünglichen und modifizierten Zustand.
Das folgende Beispiel erstellt eine Folie mit einem Textrechteck, dupliziert die Folie und ändert die Position und Größe des Rechtecks auf der Kopie. Anschließend wählt es Morph aus der Aufzählung TransitionType für die zweite Folie. Öffnen Sie die gespeicherte Datei in einem Präsentationsviewer, der Morph unterstützt, um den Effekt während einer Bildschirmpräsentation zu sehen.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ISlideShowTransition.h>
#include <DOM/IAutoShape.h>
#include <DOM/IShape.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ITextFrame.h>
#include <DOM/ShapeType.h>
#include <DOM/SlideShowTransition/TransitionType.h>
#include <Export/SaveFormat.h>
using namespace System;
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SlideShow;
auto presentation = MakeObject<Presentation>();
auto firstSlide = presentation->get_Slide(0);
auto rectangle = firstSlide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100, 100, 400, 100);
rectangle->get_TextFrame()->set_Text(u"Morph transition");
auto secondSlide = presentation->get_Slides()->AddClone(firstSlide);
auto movedRectangle = secondSlide->get_Shape(0);
movedRectangle->set_X(movedRectangle->get_X() + 100);
movedRectangle->set_Y(movedRectangle->get_Y() + 50);
movedRectangle->set_Width(movedRectangle->get_Width() - 200);
movedRectangle->set_Height(movedRectangle->get_Height() - 10);
secondSlide->get_SlideShowTransition()->set_Type(TransitionType::Morph);
presentation->Save(u"morph-transition.pptx", SaveFormat::Pptx);
presentation->Dispose();
Morph‑Übergangstypen
Die Aufzählung TransitionMorphType bestimmt, wie Morph Inhalte abgleicht und animiert:
- ByObject behandelt jede Form als ganzes Objekt.
- ByWord animiert Text, indem nach Möglichkeit Wörter abgeglichen werden.
- ByChar animiert Text, indem nach Möglichkeit Zeichen abgeglichen werden.
Rufen Sie set_Type mit Morph auf, bevor Sie get_Value aufrufen. Der zurückgegebene Wert liefert die Schnittstelle IMorphTransition, deren Methode set_MorphType den Abgleichmodus auswählt.
Dieses Beispiel öffnet die im vorherigen Abschnitt erstellte Präsentation und konfiguriert die zweite Folie so, dass sie eine wortbasierte Morph‑Animation verwendet.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ISlideShowTransition.h>
#include <DOM/SlideShowTransition/IMorphTransition.h>
#include <DOM/SlideShowTransition/ITransitionValueBase.h>
#include <DOM/SlideShowTransition/TransitionMorphType.h>
#include <DOM/SlideShowTransition/TransitionType.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
#include <system/object_ext.h>
using namespace System;
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SlideShow;
auto presentation = MakeObject<Presentation>(u"morph-transition.pptx");
if (presentation->get_Slides()->get_Count() >= 2)
{
auto transition = presentation->get_Slide(1)->get_SlideShowTransition();
transition->set_Type(TransitionType::Morph);
auto morphTransition = AsCast<IMorphTransition>(transition->get_Value());
if (morphTransition != nullptr)
{
morphTransition->set_MorphType(TransitionMorphType::ByWord);
presentation->Save(u"morph-by-word.pptx", SaveFormat::Pptx);
}
else
{
Console::WriteLine(u"Morph transition options are unavailable.");
}
}
else
{
Console::WriteLine(u"The input presentation must contain at least two slides.");
}
presentation->Dispose();
Übergangseffekte festlegen
Einige Übergänge bieten zusätzliche Optionen, etwa Richtung oder ob der Effekt von einem schwarzen Bildschirm startet. Die verfügbaren Optionen hängen vom gewählten Übergangstyp ab. Setzen Sie zuerst den Typ und verwenden Sie anschließend die geeignete Schnittstelle, die von get_Value zurückgegeben wird.
Das folgende Beispiel wendet einen Cut‑Übergang auf die erste Folie von input.pptx an. Es ruft set_FromBlack mit true über IOptionalBlackTransition auf, sodass der Übergang von einem schwarzen Bildschirm startet.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/ISlideShowTransition.h>
#include <DOM/SlideShowTransition/IOptionalBlackTransition.h>
#include <DOM/SlideShowTransition/ITransitionValueBase.h>
#include <DOM/SlideShowTransition/TransitionType.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
#include <system/object_ext.h>
using namespace System;
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SlideShow;
auto presentation = MakeObject<Presentation>(u"input.pptx");
auto transition = presentation->get_Slide(0)->get_SlideShowTransition();
transition->set_Type(TransitionType::Cut);
auto cutTransition = AsCast<IOptionalBlackTransition>(transition->get_Value());
if (cutTransition != nullptr)
{
cutTransition->set_FromBlack(true);
presentation->Save(u"cut-from-black.pptx", SaveFormat::Pptx);
}
else
{
Console::WriteLine(u"Cut transition options are unavailable.");
}
presentation->Dispose();
FAQ
Kann ich die Wiedergabegeschwindigkeit eines Folienübergangs steuern?
Ja. Verwenden Sie bevorzugt set_Duration, wenn Sie eine exakte Effektdauer in Millisekunden benötigen. Nutzen Sie set_Speed, wenn eine vordefinierte Kategorie von TransitionSpeed – Slow, Medium oder Fast – ausreicht und keine explizite Dauer gesetzt ist. Diese Einstellungen steuern den Übergangseffekt unabhängig von der Verzögerung des automatischen Voranschreitens.
Kann ich einer Folie Audio hinzufügen und es wiederholen lassen?
Ja. Weisen Sie eingebettetes Audio mit set_Sound zu, rufen Sie set_SoundMode mit StartSound aus der Aufzählung TransitionSoundMode auf und aktivieren Sie das Looping mit set_SoundLoop. Das Audio wird wiederholt, bis das nächste Sound‑Ereignis in der Präsentation eintritt.
Was ist der schnellste Weg, denselben Übergang auf jede Folie anzuwenden?
Durchlaufen Sie die Sammlung, die von der Methode get_Slides der Präsentation zurückgegeben wird, und rufen Sie für jede Folie set_Type mit demselben Wert auf. Setzen Sie Timing‑ und Effektoptionen im selben Durchlauf, um das Verhalten über alle Folien hinweg konsistent zu halten.
Wie kann ich prüfen, welcher Übergang aktuell für eine Folie eingestellt ist?
Rufen Sie get_Type auf dem Übergang auf, der von get_SlideShowTransition der Folie zurückgegeben wird. Sie erhalten einen Wert aus der Aufzählung TransitionType; None bedeutet, dass kein Übergangseffekt angewendet wurde.