Beispiel 1 — Rechteck mit Parametern
Das Standard-Starter-Template zeigt ein zentriertes Rechteck mit fünf @param-Werten: Breite, Höhe, Hintergrundfarbe, Liniendicke und Linienfarbe. Es demonstriert die grundlegende Struktur jedes parametrisierten Shape-Skripts.
Ergebnis
Code
// @help https://ppptools.happy-pc.ch/help/de/ase-beispiel-rechteck
/* PARAMS */
// @param float Breite "Breite (pt)" default=200 min=10 max=2000 tooltip="Breite des Rechtecks in Punkten"
// @param float Hoehe "Höhe (pt)" default=100 min=10 max=2000 tooltip="Höhe des Rechtecks in Punkten"
// @param color Fuellfarbe "Hintergrundfarbe" default=#4472C4 tooltip="Füllfarbe des Rechtecks"
// @param float Liniendicke "Liniendicke (pt)" default=1.5 min=0 max=20 tooltip="Dicke der Umrandungslinie (0 = keine Linie)"
// @param color Linienfarbe "Linienfarbe" default=#2E4A7A tooltip="Farbe der Umrandungslinie"
// @param bool Zentrieren "Auf Folie zentrieren" default=true tooltip="Rechteck horizontal und vertikal auf der Folie zentrieren"
/* END PARAMS */
// ── Rechteck mit Parametern ───────────────────────────────────────────
float w = (float)(double)Params["Breite"];
float h = (float)(double)Params["Hoehe"];
var fillColor = (System.Drawing.Color)Params["Fuellfarbe"];
float lineW = (float)(double)Params["Liniendicke"];
var lineColor = (System.Drawing.Color)Params["Linienfarbe"];
bool zentrieren = (bool)Params["Zentrieren"];
float x = zentrieren ? (ppptools.SlideWidth - w) / 2f : 100f;
float y = zentrieren ? (ppptools.SlideHeight - h) / 2f : 100f;
var oShape = ppptools.AddRect(x, y, w, h);
oShape.Name = "MeinRechteck";
oShape.Fill.ForeColor.RGB = System.Drawing.ColorTranslator.ToOle(fillColor);
if (lineW <= 0)
{
oShape.Line.Visible = (dynamic)0; // msoFalse = keine Linie
}
else
{
oShape.Line.Visible = (dynamic)(-1); // msoTrue
oShape.Line.Weight = lineW;
oShape.Line.ForeColor.RGB = System.Drawing.ColorTranslator.ToOle(lineColor);
}
Parameter-Dialog
Wenn du das Snippet ausführst, erscheint dieser Dialog mit den konfigurierten Werten:
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
| Breite (pt) | Float | 200 | Breite des Rechtecks in Punkten |
| Höhe (pt) | Float | 100 | Höhe des Rechtecks in Punkten |
| Hintergrundfarbe | Farbe | #4472C4 | Füllfarbe des Rechtecks |
| Liniendicke (pt) | Float | 1.5 | Dicke der Umrandung (0 = keine Linie) |
| Linienfarbe | Farbe | #2E4A7A | Farbe der Umrandungslinie |
| Auf Folie zentrieren | Bool | ✓ | Rechteck zentriert platzieren (sonst bei 100/100 pt) |
Schritt-für-Schritt-Erklärung
1. @help und @param-Definitionen
// @help https://ppptools.happy-pc.ch/help/de/ase-beispiel-rechteck
// @param float Breite "Breite (pt)" default=200 min=10 max=2000
Die @param-Zeilen werden vom Advanced Snippet Editor geparst und erzeugen automatisch den Parameter-Dialog vor dem Ausführen. Jede Definition enthält:
- Typ:
float,color,string,bool,int,enum - Name: Interner Bezeichner (ohne Leerzeichen) — wird als Key in
Params["…"]verwendet - Label: Anzeigename im Dialog (in Anführungszeichen)
- default: Vorgabewert
- min / max: Erlaubter Wertebereich (nur bei
float/int) - tooltip: Erklärungstext, der im Dialog beim Hovern erscheint
2. Parameter-Werte lesen
float w = (float)(double)Params["Breite"];
var fillColor = (System.Drawing.Color)Params["Fuellfarbe"];
Params ist ein Dictionary<string, object>. Der Doppelcast (float)(double) ist nötig, weil numeric-Params intern als double gespeichert werden. Für color-Params liefert Params[…] direkt ein System.Drawing.Color-Objekt.
3. Zentriert positionieren
float x = (ppptools.SlideWidth - w) / 2f;
float y = (ppptools.SlideHeight - h) / 2f;
ppptools.SlideWidth / ppptools.SlideHeight liefern die Folienabmessungen in Punkten (Standard 16:9 = 720 × 405 PT). So landet das Rechteck immer in der Mitte — unabhängig von Folienformat oder gewählter Grösse.
4. Form erstellen und Farbe setzen
var oShape = ppptools.AddRect(x, y, w, h);
oShape.Fill.ForeColor.RGB = System.Drawing.ColorTranslator.ToOle(fillColor);
PowerPoint speichert Farben als OLE-Integer (BGR-Reihenfolge). ColorTranslator.ToOle() konvertiert System.Drawing.Color korrekt in dieses Format.
5. Linie bedingt anzeigen
if (lineW <= 0)
oShape.Line.Visible = (dynamic)0; // msoFalse — keine Linie
else
{
oShape.Line.Visible = (dynamic)(-1); // msoTrue
oShape.Line.Weight = lineW;
oShape.Line.ForeColor.RGB = System.Drawing.ColorTranslator.ToOle(lineColor);
}
Der Cast (dynamic) ist in Roslyn-Scripts nötig, weil Line.Visible vom Typ MsoTriState ist — ein COM-Enum, das in Roslyn nicht direkt als true/false gesetzt werden kann. 0 = msoFalse, -1 = msoTrue.
Wichtige Patterns dieses Beispiels
(float)(double)Params[…]— zwingend für float/int-Parameter (interndouble)(System.Drawing.Color)Params[…]— direkt für color-ParameterColorTranslator.ToOle()— für alle Farbzuweisungen an PowerPoint-Shapes(dynamic)0/(dynamic)(-1)— fürMsoTriState-Eigenschaftenppptools.SlideWidth/SlideHeight— Folienabmessungen für Zentrierung
Weiter: Beispiel 2 — Kreis