
A mellékelt példaprogram megnyitása előtt a RoundedMemo.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A lekerekített sarkoknál a komponens természetesen átlátszó lesz, mint ahogyan az a mellékelt képen is látszik. A lekerekítés mértékét a RoundSize property-ben állíthatjuk be a lekerekítéshez használt kör átmérőjét megadva. A BorderStyle property-ben a szokásos bsNone és bsSingle értéket kell megadnunk. Ezen a két property-n kívül a keret kinézetét még a Ctl3D, illetve a ParentCtl3D property-k értékei is befolyásolják. Ez utóbbi két property értékének megváltozásáról a CM_CTL3DCHANGED és a CM_PARENTCTL3DCHANGED üzenetekből értesülhetünk, ezért ezekhez készítünk egy-egy eseménykezelő eljárást.
A lekerekítést és a szerkesztési terület pozíciójának és méretének megadását az Update eljárásban végezzük el. Ebben létrehozunk egy régiót a CreateRoundRectRgn függvénnyel, amit rá is „húzunk” a komponensre a SetWindowRgn függvénnyel. A szerkesztési területet úgy határozzuk meg, hogy a lekerekítés mértékének egynegyedével (vagyis a kör sugarának felével) beljebb toljuk a területet, vagyis a komponens szélétől minden oldalon ekkora távolságban lesz a terület határa. Így azt érjük el, hogy a szöveg sehol sem fog belelógni a lekerekített részbe.
Az új terület pozícióját az EM_SETRECTNP üzenettel közölhetjük a komponenssel.
Meghívjuk még az Invalidate eljárást is, ami frissíti a komponens képét. Erre a keret megrajzolásához van szükség, amit a Paint eljárásban végzünk el.
A Paint eljárásban szükség lesz egy Canvas objektumra, amire megrajzolhatjuk a keretet. Mivel a Memo komponensnek nincs Canvas objektuma, ezért a GetWindowDC függvénnyel lekérdezzük a komponens Device Context leíróját, amit egy általunk létrehozott Canvas objektum Handle property-jének adunk át. Ezzel azt érjük el, hogy amikor a Canvas objektum eljárásaival rajzolunk, akkor a rajz a komponensen fog megjelenni. Persze mindezt csak akkor kell megtennünk, ha a BorderStyle property értéke nem bsNone. Ha nem az, akkor még a Ctl3D property értékét is ellenőriznünk kell. Ha ennek értéke hamis, akkor egy egyszerű keretet kell rajzolnunk. Ezt egyszerűen megtehetjük a FrameRgn függvénnyel a komponens régiójának lekérdezése után (GetWindowRgn).
Ha a Ctl3D property értéke igaz, akkor meg kell rajzolnunk a 3D-s keretet, ami a Canvas objektum eljárásaival történhet meg.