Helper-Beispiel: PostIt
← 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