Beheer presentatiethema's in C++
Introductie
Een presentatiethema definieert de eigenschappen van ontwerpelementen. Wanneer u een presentatiethema selecteert, kiest u in feite een specifieke set visuele elementen en hun eigenschappen.
In PowerPoint bestaat een thema uit kleuren, lettertypen, achtergrondstijlen, en effecten.

Themakleur wijzigen
Een PowerPoint‑thema gebruikt een specifieke set kleuren voor verschillende elementen op een dia. Als u de kleuren niet bevalt, kunt u ze wijzigen door nieuwe kleuren voor het thema toe te passen. Om een nieuwe themakleur te selecteren, biedt Aspose.Slides waarden onder de SchemeColor enumeratie.
Deze C++‑code laat zien hoe u de accentkleur voor een thema wijzigt:
auto pres = System::MakeObject<Presentation>();
auto shape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 10.0f, 10.0f, 100.0f, 100.0f);
shape->get_FillFormat()->set_FillType(FillType::Solid);
shape->get_FillFormat()->get_SolidFillColor()->set_SchemeColor(SchemeColor::Accent4);
Zo kunt u de effectieve waarde van de resulterende kleur bepalen:
auto fillEffective = shape->get_FillFormat()->GetEffective();
Console::WriteLine(u"{0} ({1})", fillEffective->get_SolidFillColor().get_Name(), fillEffective->get_SolidFillColor());
// ff8064a2 (Kleur [A=255, R=128, G=100, B=162])
Om de kleuraanpassing verder te demonstreren, maken we een ander element aan en wijzen we de accentkleur (van de eerste bewerking) toe. Vervolgens wijzigen we de kleur in het thema:
auto otherShape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 10.0f, 120.0f, 100.0f, 100.0f);
otherShape->get_FillFormat()->set_FillType(FillType::Solid);
otherShape->get_FillFormat()->get_SolidFillColor()->set_SchemeColor(SchemeColor::Accent4);
pres->get_MasterTheme()->get_ColorScheme()->get_Accent4()->set_Color(Color::get_Red());
De nieuwe kleur wordt automatisch toegepast op beide elementen.
Themakleur instellen vanuit een extra palet
Wanneer u luminantietransformaties toepast op de hoofdkleur van het thema(1), ontstaan kleuren uit het extra palet(2). U kunt vervolgens die themakleuren instellen en opvragen.

1- Hoofdkleuren van thema
2 - Kleuren uit het extra palet.
Deze C++‑code toont een bewerking waarbij kleuren uit het extra palet worden verkregen van de hoofdkleur van het thema en vervolgens in vormen worden gebruikt:
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto shapes = slide->get_Shapes();
// Accent 4
auto shape1 = shapes->AddAutoShape(ShapeType::Rectangle, 10.0f, 10.0f, 50.0f, 50.0f);
auto fillFormat1 = shape1->get_FillFormat();
fillFormat1->set_FillType(FillType::Solid);
fillFormat1->get_SolidFillColor()->set_SchemeColor(SchemeColor::Accent4);
// Accent 4, lichter 80%
auto shape2 = shapes->AddAutoShape(ShapeType::Rectangle, 10.0f, 70.0f, 50.0f, 50.0f);
auto fillFormat2 = shape2->get_FillFormat();
auto solidFillColor2 = fillFormat2->get_SolidFillColor();
fillFormat2->set_FillType(FillType::Solid);
solidFillColor2->set_SchemeColor(SchemeColor::Accent4);
solidFillColor2->get_ColorTransform()->Add(ColorTransformOperation::MultiplyLuminance, 0.2f);
solidFillColor2->get_ColorTransform()->Add(ColorTransformOperation::AddLuminance, 0.8f);
// Accent 4, lichter 60%
auto shape3 = shapes->AddAutoShape(ShapeType::Rectangle, 10.0f, 130.0f, 50.0f, 50.0f);
auto fillFormat3 = shape3->get_FillFormat();
auto solidFillColor3 = fillFormat3->get_SolidFillColor();
fillFormat3->set_FillType(FillType::Solid);
solidFillColor3->set_SchemeColor(SchemeColor::Accent4);
solidFillColor3->get_ColorTransform()->Add(ColorTransformOperation::MultiplyLuminance, 0.4f);
solidFillColor3->get_ColorTransform()->Add(ColorTransformOperation::AddLuminance, 0.6f);
// Accent 4, lichter 40%
auto shape4 = shapes->AddAutoShape(ShapeType::Rectangle, 10.0f, 190.0f, 50.0f, 50.0f);
auto fillFormat4 = shape4->get_FillFormat();
auto solidFillColor4 = fillFormat4->get_SolidFillColor();
fillFormat4->set_FillType(FillType::Solid);
solidFillColor4->set_SchemeColor(SchemeColor::Accent4);
solidFillColor4->get_ColorTransform()->Add(ColorTransformOperation::MultiplyLuminance, 0.6f);
solidFillColor4->get_ColorTransform()->Add(ColorTransformOperation::AddLuminance, 0.4f);
// Accent 4, donkerder 25%
auto shape5 = shapes->AddAutoShape(ShapeType::Rectangle, 10.0f, 250.0f, 50.0f, 50.0f);
auto fillFormat5 = shape5->get_FillFormat();
auto solidFillColor5 = fillFormat5->get_SolidFillColor();
fillFormat5->set_FillType(FillType::Solid);
solidFillColor5->set_SchemeColor(SchemeColor::Accent4);
solidFillColor5->get_ColorTransform()->Add(ColorTransformOperation::MultiplyLuminance, 0.75f);
// Accent 4, donkerder 50%
auto shape6 = shapes->AddAutoShape(ShapeType::Rectangle, 10.0f, 310.0f, 50.0f, 50.0f);
auto fillFormat6 = shape6->get_FillFormat();
auto solidFillColor6 = fillFormat6->get_SolidFillColor();
fillFormat6->set_FillType(FillType::Solid);
solidFillColor6->set_SchemeColor(SchemeColor::Accent4);
solidFillColor6->get_ColorTransform()->Add(ColorTransformOperation::MultiplyLuminance, 0.5f);
presentation->Save(u"example.pptx", Export::SaveFormat::Pptx);
SchemeColor naar IColorScheme kleuren toewijzen
Wanneer u werkt met SchemeColor, zult u merken dat het de volgende themakleurwaarden bevat:
Background1, Background2, Text1 en Text2.
Echter, Presentation::get_MasterTheme()::get_ColorScheme() retourneert IColorScheme, die de corresponderende kleuren toont als:
Dark1, Dark2, Light1 en Light2.
Dit verschil zit alleen in de benaming. Deze waarden verwijzen naar dezelfde themakleur‑posities en de toewijzing is vast:
Text1=Dark1Background1=Light1Text2=Dark2Background2=Light2
Er is geen dynamische conversie tussen Text/Background en Dark/Light. Het zijn simpelweg alternatieve namen voor dezelfde themakleuren.
Dit verschil in benamingen komt voort uit de terminologie van Microsoft Office. Oudere Office‑versies gebruikten Dark 1, Light 1, Dark 2 en Light 2, terwijl nieuwere UI‑versies dezelfde posities tonen als Text 1, Background 1, Text 2 en Background 2.
Themalettertype wijzigen
Om u in staat te stellen lettertypen voor thema’s en andere doeleinden te selecteren, gebruikt Aspose.Slides deze speciale identifiers (vergelijkbaar met die in PowerPoint):
- +mn-lt - Body Font Latin (Minor Latin Font)
- +mj-lt - Heading Font Latin (Major Latin Font)
- +mn-ea - Body Font East Asian (Minor East Asian Font)
- +mj-ea - Body Font East Asian (Major East Asian Font)
Deze C++‑code laat zien hoe u het Latijnse lettertype toewijst aan een thema‑element:
auto shape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 10.0f, 10.0f, 100.0f, 100.0f);
auto paragraph = System::MakeObject<Paragraph>();
auto portion = System::MakeObject<Portion>(u"Theme text format");
paragraph->get_Portions()->Add(portion);
shape->get_TextFrame()->get_Paragraphs()->Add(paragraph);
portion->get_PortionFormat()->set_LatinFont(System::MakeObject<FontData>(u"+mn-lt"));
Deze C++‑code laat zien hoe u het presentatiethema‑lettertype wijzigt:
pres->get_MasterTheme()->get_FontScheme()->get_Minor()->set_LatinFont(MakeObject<FontData>(u"Arial"));
Het lettertype in alle tekstvakken wordt bijgewerkt.
TIP
U wilt wellicht PowerPoint fonts bekijken.Thema‑achtergrondstijl wijzigen
Standaard biedt de PowerPoint‑app 12 vooraf gedefinieerde achtergronden, maar slechts 3 van die 12 achtergronden worden opgeslagen in een gewone presentatie.

Bijvoorbeeld, nadat u een presentatie hebt opgeslagen in de PowerPoint‑app, kunt u deze C++‑code uitvoeren om het aantal vooraf gedefinieerde achtergronden in de presentatie te achterhalen:
auto pres = MakeObject<Presentation>(u"pres.pptx");
int32_t numberOfBackgroundFills = pres->get_MasterTheme()->get_FormatScheme()->get_BackgroundFillStyles()->get_Count();
Console::WriteLine(u"Number of background fill styles for theme is {0}", numberOfBackgroundFills);
Deze C++‑code laat zien hoe u de achtergrond voor een presentatie instelt:
pres->get_Masters()->idx_get(0)->get_Background()->set_StyleIndex(2);
Indexgids: 0 staat voor geen vulling. De index begint bij 1.
TIP
U wilt wellicht PowerPoint Background bekijken.Thema‑effect wijzigen
Een PowerPoint‑thema bevat meestal 3 waarden voor elke stijl‑array. Die arrays worden gecombineerd tot deze 3 effecten: subtiel, gematigd en intens. Bijvoorbeeld, dit is het resultaat wanneer de effecten op een specifieke vorm worden toegepast:

Door 3 eigenschappen (FillStyles, LineStyles, EffectStyles) van de FormatScheme‑klasse te gebruiken, kunt u de elementen in een thema aanpassen (nog flexibeler dan de opties in PowerPoint).
Deze C++‑code laat zien hoe u een thema‑effect wijzigt door delen van elementen aan te passen:
auto pres = System::MakeObject<Presentation>(u"Subtle_Moderate_Intense.pptx");
pres->get_MasterTheme()->get_FormatScheme()->get_LineStyles()->idx_get(0)->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
pres->get_MasterTheme()->get_FormatScheme()->get_FillStyles()->idx_get(2)->set_FillType(FillType::Solid);
pres->get_MasterTheme()->get_FormatScheme()->get_FillStyles()->idx_get(2)->get_SolidFillColor()->set_Color(Color::get_ForestGreen());
pres->get_MasterTheme()->get_FormatScheme()->get_EffectStyles()->idx_get(2)->get_EffectFormat()->get_OuterShadowEffect()->set_Distance(10.f);
pres->Save(u"Design_04_Subtle_Moderate_Intense-out.pptx", SaveFormat::Pptx);
De resulterende wijzigingen in vulkleur, vultype, schaduweffect, enz.:

FAQ
Kan ik een thema toepassen op één dia zonder de master te wijzigen?
Ja. Aspose.Slides ondersteunt thema‑overschrijvingen op dia‑niveau, zodat u een lokaal thema kunt toepassen op die specifieke dia terwijl het master‑thema intact blijft (via de SlideThemeManager).
Wat is de veiligste manier om een thema van de ene presentatie naar de andere over te dragen?
Clone slides samen met hun master naar de doelpresentatie. Dit behoudt de originele master, indelingen en het bijbehorende thema, zodat het uiterlijk consistent blijft.
Hoe kan ik de “effectieve” waarden zien na alle overerving en overschrijvingen?
Gebruik de “effective” weergaven van de API voor thema/kleur/lettertype/effect. Deze geven de uiteindelijke, opgeloste eigenschappen terug na het toepassen van de master plus eventuele lokale overschrijvingen.