Beispiel 1 — Rechteck mit Parametern

Erstellt: 2026-05-27 · Aktualisiert: 2026-05-31

Advanced Snippet Editor

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 (intern double)
  • (System.Drawing.Color)Params[…] — direkt für color-Parameter
  • ColorTranslator.ToOle() — für alle Farbzuweisungen an PowerPoint-Shapes
  • (dynamic)0 / (dynamic)(-1) — für MsoTriState-Eigenschaften
  • ppptools.SlideWidth / SlideHeight — Folienabmessungen für Zentrierung

Weiter: Beispiel 2 — Kreis