Helper Example: Post-it
← Helper Reference · Advanced Snippet Editor
Parameterized Post-it with selectable size, color, and optional drop shadow. Demonstrates Freeform, Duplicate, Flip, Z-Order, Gradient, and Group.
ppptools Methods Used
| Method | Purpose |
|---|---|
ppptools.BuildFreeform(editingType, x, y) |
Post-it body as a parallelogram |
ppptools.AddRect(x, y, w, h) |
Clipping mask for Intersect |
ppptools.Intersect() |
Post-it base with clean edge |
ppptools.Subtract() |
Cut folded corner |
ppptools.GetSelected() |
Retrieve result shape after Boolean op |
ppptools.Duplicate(shape) |
Create shadow duplicate |
ppptools.FlipH(shape) |
Flip shadow horizontally |
ppptools.SetGradient(...) |
Shadow gradient fill |
ppptools.HideLine(shape) |
Hide shadow outline |
ppptools.SendBackward(shape) |
Push shadow behind Post-it |
ppptools.Group(shape1, shape2) |
Group Post-it and shadow |
ppptools.SlideWidth / SlideHeight |
Center on slide |
Parameters
| @param | Type | Default | Description |
|---|---|---|---|
Groesse |
enum | "Mittel" |
Small (75%), Medium (100%), Large (150%) |
Farbe |
color | #FFD966 |
Post-it background color |
Schatten |
bool | true |
Show drop shadow |
Zentrieren |
bool | true |
Center on slide |
Result
Full Code
// @help https://ppptools.happy-pc.ch/help/en/helper-example-postit
// @param enum Groesse "Size" options="Klein|Mittel|Gross" default="Mittel"
// @param color Farbe "Color" default=#FFD966
// @param bool Schatten "Show shadow" default=true
// @param bool Zentrieren "Center on slide" 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;
// ── Step 1: Freeform (parallelogram) ──────────────────────────────────
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";
var oRect = ppptools.AddRect(bx, by, bw + pi, bh);
oRect.Name = "PostIt_Rect";
// ── Step 2: Intersect → clean Post-it base ────────────────────────────
oFreeform.Select(MsoTriState.msoTrue);
oRect.Select(MsoTriState.msoFalse);
ppptools.Intersect();
dynamic oBase = ppptools.GetSelected();
// ── Step 3: Subtract → cut folded corner ──────────────────────────────
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();
// ── Post-it formatting ────────────────────────────────────────────────
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();
// ── Step 4: Shadow ────────────────────────────────────────────────────
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);
}
// ── Step 5: Group ─────────────────────────────────────────────────────
dynamic oGroup = oShadow != null
? ppptools.Group(oPostIt, oShadow)
: ppptools.Group(oPostIt);
oGroup.Name = "PostIt_Group";
// ── Scale ─────────────────────────────────────────────────────────────
float scale = groesse == "Klein" ? 0.75f : groesse == "Gross" ? 1.5f : 1.0f;
oGroup.Width = (float)oGroup.Width * scale;
oGroup.Height = (float)oGroup.Height * scale;
// ── Center ────────────────────────────────────────────────────────────
if (zentrieren)
{
oGroup.Left = (ppptools.SlideWidth - (float)oGroup.Width) / 2f;
oGroup.Top = (ppptools.SlideHeight - (float)oGroup.Height) / 2f;
}
Step by Step
1. Freeform with ppptools.BuildFreeform
BuildFreeform returns a FreeformBuilder. Call .AddNodes(...) to add points, then .ConvertToShape() to finish. Here it creates a parallelogram with a slanted side edge — the characteristic Post-it shape.
2. Clipping mask with ppptools.AddRect + Intersect
The rectangle clips the slanted parallelogram to rectangular bounds — the left side becomes straight. ppptools.GetSelected() retrieves the result after Intersect.
3. Folded corner with ppptools.Duplicate + Subtract
dynamic oCut = ppptools.Duplicate(oBase); // returns shape directly (no [1] index)
oCut.Left = (float)oBase.Left + bw; // offset to overlap only top-right corner
ppptools.Subtract();
ppptools.Duplicate returns the new shape directly — no [1] index needed. The copy is shifted right by bw, so it only overlaps the top-right corner. Subtract removes that corner → the classic folded Post-it corner.
4. Shadow with ppptools.FlipH, SetGradient, HideLine, SendBackward
oShadow = ppptools.Duplicate(oPostIt);
ppptools.FlipH(oShadow); // mirror horizontally
ppptools.SetGradient(oShadow,
Color.FromArgb(38, 38, 38), // dark at top
Color.FromArgb(241, 241, 241)); // light at bottom
ppptools.HideLine(oShadow);
ppptools.SendBackward(oShadow); // behind Post-it
ppptools.SetGradient sets a 2-color gradient in a single call (default angle 90°).
5. Group with ppptools.Group
dynamic oGroup = oShadow != null
? ppptools.Group(oPostIt, oShadow)
: ppptools.Group(oPostIt);
ppptools.Group(shape1, shape2, ...) selects all given shapes and groups them. No manual .Select() calls needed.
Back: Helper Reference · All Examples