
A mellékelt példaprogram megnyitása előtt az EditInsertText.pas.-ban lévő akció osztályt telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Az új osztályt a TEditAction osztályból származtatjuk. Azért ezt használjuk, mert ez már alapban tartalmazza azt a lehetőséget, hogy az akciót egy TCustomEdit osztályból származó komponenshez rendeljük, hasonlóan a TEditCut, TEditCopy, stb. akciókhoz. Ebben felülírjuk az ExecuteTarget eljárást, ami akkor fut le, amikor az akciót futtatjuk. Ennek paraméterében megkapjuk azt az objektumot, amire az akciót futtatni kell (pl. egy Memo komponenst). Ezt az objektumot eltároljuk az FTargetControl globális változóban, majd az AddMenuItems eljárással létrehozzuk a menüt, és meg is jelenítjük. A menü pozícióját megadhatjuk a PopupX és PopupY property-kben. Ha valamelyikben 0-nál kisebb értéket adunk meg, akkor ott az egér aktuális pozícióját használjuk fel:
var
p: TPoint;
x, y: integer;
...
if FTexts.Count>0 then begin
FTargetControl:=GetControl(Target);
AddMenuItems;
GetCursorPos(p);
if FPopupX<0 then x:=p.x else x:=FPopupX;
if FPopupY<0 then y:=p.y else y:=FPopupY;
FPopupMenu.Popup(x, y);
end;
A szövegeket a Texts property-ben adhatjuk meg. Ez a property TInsertTextItems típusú, amely a TOwnedCollection osztályból származik, és TInsertTextItem típusú elemeket tartalmaz. Egy-egy elem egy beszúrható szöveget tartalmaz. A Title property-ben adhatjuk meg a szöveg címét, ez jelenik meg a menüben. A Text property-ben adhatjuk meg a szöveget, ami akár több soros is lehet.
A menüt az AddMenuItems eljárással hozzuk létre. Ebből először meghívjuk a RemoveMenuItems eljárást, ami törli a menü elemeit, majd a Texts property minden eleméhez létrehozunk egy-egy menüpontot. A menüpontok OnClick eseményéhez hozzárendeljük a DoMenuItemClick eljárást, a Tag property-ben pedig megadjuk az elem sorszámát (indexét). Amikor a felhasználó kiválaszt egy menüpontot, akkor lefut a DoMenuItemClick eljárás, amelyben a Tag property segítségével azonosítjuk, hogy melyik elemet kell beszúrni az FTargetControl változóban eltárolt komponens szövegébe. A beszúrandó szövegből töröljük az utolsó soremelés karaktereket (#13#10), különben az egy soros szövegek után is mindig beszúrná ezeket:
var
s: string;
...
s:=FTexts[(Sender as TMenuItem).Tag].FText.Text;
if s<>'' then begin
if Copy(s, Length(s)-1, 2)=#13#10 then Delete(s, Length(s)-1, 2);
FTargetControl.SelText:=s;
end;
Mivel az új akció nem egy komponens, ezért a Register eljárásban nem a RegisterComponents, hanem a RegisterActions eljárással kell regisztrálnunk.
RegisterActions('Edit', [TEditInsertText], nil);
Az eljárás leírása a következő:

RegisterActions
Osztály:
procedure RegisterActions(
const CategoryName: string;
const AClasses: array of TBasicActionClass;
Resource: TComponentClass
);
Ezzel az eljárással tudunk új standard akciókat regisztrálni.
Paraméterek
const CategoryName: string
Az akció kategóriájának megnevezése (pl. „Edit”). Megadhatunk még nem létező kategóriákat is.
const AClasses: array of TBasicActionClass
A regisztrálni kívánt akció osztályok egy tömb paraméterben megadva.
Resource: TComponentClass
Ha az akciónak alapértelmezett értékeket akarunk átadni, akkor ebben megadhatunk egy TDataModule-ból származtatott objektumot. Ha nem akarunk alapértelmezett értékeket megadni, akkor adjunk meg nil-t.