🌐 This page is not yet available in English — showing the German version.

Helper-Beispiel: PostIt

Erstellt: 2026-05-29 · Aktualisiert: 2026-05-29

Helper-Referenz · Advanced Snippet Editor

Parametrisiertes PostIt mit wählbarer Grösse, Farbe und optionalem Schatten-Tiefeneffekt. Zeigt Freeform, Duplicate, Flip, Z-Order, Gradient und Group.


Verwendete ppptools-Methoden

Methode Verwendungszweck
ppptools.BuildFreeform(editingType, x, y) PostIt-Körper als Parallelogramm
ppptools.AddRect(x, y, w, h) Schnittmaske für Intersect
ppptools.Intersect() PostIt-Basis mit glatter Kante
ppptools.Subtract() Gefaltete Ecke ausschneiden
ppptools.GetSelected() Ergebnis-Shape nach Boolean-Op
ppptools.Duplicate(shape) Schatten-Duplikat erzeugen
ppptools.FlipH(shape) Schatten horizontal spiegeln
ppptools.SetGradient(...) Schatten-Verlauf
ppptools.HideLine(shape) Konturlinie des Schattens verstecken
ppptools.SendBackward(shape) Schatten hinter PostIt
ppptools.Group(shape1, shape2) PostIt + Schatten gruppieren
ppptools.SlideWidth / SlideHeight Zentrieren

Parameter

@param Typ Standard Beschreibung
Groesse enum "Mittel" Klein (75%), Mittel (100%), Gross (150%)
Farbe color #FFD966 PostIt-Hintergrundfarbe
Schatten bool true Schatten-Tiefeneffekt anzeigen
Zentrieren bool true Auf Folie zentrieren

Ergebnis


Vollständiger Code

// @help https://ppptools.happy-pc.ch/help/de/helper-beispiel-postit
// @param enum   Groesse    "Grösse"               options="Klein|Mittel|Gross"  default="Mittel"
// @param color  Farbe      "Farbe"                default=#FFD966
// @param bool   Schatten   "Schatten anzeigen"    default=true
// @param bool   Zentrieren "Auf Folie zentrieren" default=true

string groesse    = Params.GetString("Groesse",   "Mittel");
var    farbe      = Params.GetColor("Farbe",      Color.FromArgb(255, 217, 102));
bool   schatten   = Params.GetBool("Schatten",   true);
bool   zentrieren = Params.GetBool("Zentrieren", true);

int farbeRgb = System.Drawing.ColorTranslator.ToOle(farbe);

float bx = 100f, by = 100f, bw = 100f, bh = 100f, pi = 20f;

// ── Schritt 1: Freeform (Parallelogramm) ─────────────────────────────
var ffb = ppptools.BuildFreeform(MsoEditingType.msoEditingCorner, bx, by);
ffb.AddNodes(MsoSegmentType.msoSegmentLine,  MsoEditingType.msoEditingCorner, bx + bw,      by);
ffb.AddNodes(MsoSegmentType.msoSegmentLine,  MsoEditingType.msoEditingCorner, bx + bw + pi, by + bh);
ffb.AddNodes(MsoSegmentType.msoSegmentLine,  MsoEditingType.msoEditingCorner, bx + pi,      by + bh);
ffb.AddNodes(MsoSegmentType.msoSegmentCurve, MsoEditingType.msoEditingCorner, bx, by + 130f, bx, by);
var oFreeform = ffb.ConvertToShape();
oFreeform.Name = "PostIt_Freeform";

// Rechteck als Schnittmaske
var oRect = ppptools.AddRect(bx, by, bw + pi, bh);
oRect.Name = "PostIt_Rect";

// ── Schritt 2: Intersect → PostIt-Basis ──────────────────────────────
oFreeform.Select(MsoTriState.msoTrue);
oRect.Select(MsoTriState.msoFalse);
ppptools.Intersect();
dynamic oBase = ppptools.GetSelected();

// ── Schritt 3: Subtract → gefaltete Ecke ausschneiden ────────────────
dynamic oCut = ppptools.Duplicate(oBase);
oCut.Left = (float)oBase.Left + bw;
oCut.Top  = (float)oBase.Top;
oBase.Select(MsoTriState.msoTrue);
oCut.Select(MsoTriState.msoFalse);
ppptools.Subtract();
dynamic oPostIt = ppptools.GetSelected();

// ── Formatierung PostIt ───────────────────────────────────────────────
oPostIt.Fill.ForeColor.RGB  = farbeRgb;
oPostIt.Fill.Transparency   = 0f;
oPostIt.Line.Weight         = 2f;
oPostIt.Line.ForeColor.RGB  = 16777215;
oPostIt.Line.Transparency   = 0f;
oPostIt.Line.DashStyle      = MsoLineDashStyle.msoLineSolid;
oPostIt.Line.Style          = MsoLineStyle.msoLineSingle;
oPostIt.Name = "PostIt";

oPostIt.TextFrame.TextRange.ParagraphFormat.Alignment         = PpParagraphAlignment.ppAlignCenter;
oPostIt.TextFrame.TextRange.ParagraphFormat.BaseLineAlignment = PpBaselineAlignment.ppBaselineAlignCenter;
oPostIt.TextFrame2.VerticalAnchor  = MsoVerticalAnchor.msoAnchorMiddle;
oPostIt.TextFrame.VerticalAnchor   = MsoVerticalAnchor.msoAnchorMiddle;
oPostIt.TextFrame2.Orientation     = MsoTextOrientation.msoTextOrientationHorizontal;
oPostIt.TextFrame2.MarginTop    = 3.6f;
oPostIt.TextFrame2.MarginRight  = 7.2f;
oPostIt.TextFrame2.MarginBottom = 3.6f;
oPostIt.TextFrame2.MarginLeft   = 7.2f;
oPostIt.TextFrame.WordWrap      = MsoTriState.msoTrue;
oPostIt.TextFrame2.Column.Number  = 1;
oPostIt.TextFrame2.Column.Spacing = 0;
oPostIt.TextFrame2.AutoSize = MsoAutoSize.msoAutoSizeTextToFitShape;
oPostIt.TextFrame.TextRange.Font.Name  = "Arial";
oPostIt.TextFrame.TextRange.Font.Size  = 12;
oPostIt.TextFrame.TextRange.Font.Bold  = MsoTriState.msoFalse;
oPostIt.TextFrame.TextRange.Font.Color.RGB =
    System.Drawing.ColorTranslator.ToOle(Color.FromArgb(38, 38, 38));
oPostIt.TextFrame2.TextRange.Font.Fill.Solid();

// ── Schritt 4: Schatten ───────────────────────────────────────────────
dynamic oShadow = null;
if (schatten)
{
    oShadow = ppptools.Duplicate(oPostIt);
    oShadow.Name = "PostIt_Shadow";
    ppptools.FlipH(oShadow);
    oShadow.Top    = (float)oPostIt.Top;
    oShadow.Left   = (float)oPostIt.Left - 10f;
    oShadow.Height = (float)oShadow.Height + 15f;
    ppptools.SetGradient(oShadow, Color.FromArgb(38, 38, 38), Color.FromArgb(241, 241, 241));
    ppptools.HideLine(oShadow);
    ppptools.SendBackward(oShadow);
}

// ── Schritt 5: Gruppieren ─────────────────────────────────────────────
dynamic oGroup = oShadow != null
    ? ppptools.Group(oPostIt, oShadow)
    : ppptools.Group(oPostIt);
oGroup.Name = "PostIt_Group";

// ── Skalieren ─────────────────────────────────────────────────────────
float scale = groesse == "Klein" ? 0.75f : groesse == "Gross" ? 1.5f : 1.0f;
oGroup.Width  = (float)oGroup.Width  * scale;
oGroup.Height = (float)oGroup.Height * scale;

// ── Zentrieren ────────────────────────────────────────────────────────
if (zentrieren)
{
    oGroup.Left = (ppptools.SlideWidth  - (float)oGroup.Width)  / 2f;
    oGroup.Top  = (ppptools.SlideHeight - (float)oGroup.Height) / 2f;
}

Schritt-für-Schritt

1. Freeform mit ppptools.BuildFreeform

var ffb = ppptools.BuildFreeform(MsoEditingType.msoEditingCorner, bx, by);
ffb.AddNodes(...);
var oFreeform = ffb.ConvertToShape();

BuildFreeform gibt einen FreeformBuilder zurück. Mit AddNodes werden weitere Punkte hinzugefügt, ConvertToShape() schliesst die Form ab. Ergibt hier ein Parallelogramm mit schräger Seitenkante — die charakteristische PostIt-Form.


2. Schnittmaske mit ppptools.AddRect + Intersect

var oRect = ppptools.AddRect(bx, by, bw + pi, bh);
oFreeform.Select(MsoTriState.msoTrue);
oRect.Select(MsoTriState.msoFalse);
ppptools.Intersect();
dynamic oBase = ppptools.GetSelected();

Das Rechteck begrenzt das schräge Parallelogramm auf rechteckige Bounds — die linke Seite wird gerade. ppptools.GetSelected() greift das Ergebnis nach dem Intersect.


3. Gefaltete Ecke mit ppptools.Duplicate + Subtract

dynamic oCut = ppptools.Duplicate(oBase);
oCut.Left = (float)oBase.Left + bw;
ppptools.Subtract();
dynamic oPostIt = ppptools.GetSelected();

ppptools.Duplicate gibt das neue Shape direkt zurück (kein [1]-Index nötig). Das Duplikat wird um bw nach rechts verschoben — es überlappt nur die obere rechte Ecke. Subtract stanzt diesen Bereich aus → typische gefaltete PostIt-Ecke.


4. Schatten mit ppptools.FlipH, SetGradient, HideLine, SendBackward

oShadow = ppptools.Duplicate(oPostIt);
ppptools.FlipH(oShadow);                // horizontal spiegeln
oShadow.Left = (float)oPostIt.Left - 10f;
oShadow.Height = (float)oShadow.Height + 15f;

ppptools.SetGradient(oShadow,
    Color.FromArgb(38, 38, 38),      // dunkel oben
    Color.FromArgb(241, 241, 241));  // hell unten
ppptools.HideLine(oShadow);
ppptools.SendBackward(oShadow);        // hinter PostIt

Der Schatten ist ein gespiegeltes Duplikat des PostIts mit Gradient-Füllung. ppptools.SetGradient setzt den 2-Farb-Verlauf mit einem Aufruf (Standardwinkel 90°). ppptools.SendBackward schiebt den Schatten eine Ebene hinter das PostIt.


5. Gruppieren mit ppptools.Group

dynamic oGroup = oShadow != null
    ? ppptools.Group(oPostIt, oShadow)
    : ppptools.Group(oPostIt);

ppptools.Group(shape1, shape2, ...) selektiert alle übergebenen Shapes und gruppiert sie in einem Aufruf. Kein manuelles .Select(msoTrue) / .Select(msoFalse) nötig.


Zurück: Helper-Referenz · Alle Beispiele