
A mellékelt példaprogram megnyitása előtt a GfxWindow.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Az új komponenst a TCustomControl osztályból fogjuk származtatni. A komponens property-jei a következők:

Picture
Osztály: TGfxWindow
property Picture: TPicture;
Ebben a property-ben adhatjuk meg azt a bitképet, amit a komponensnek meg kell jelenítenie. Ha nem adunk meg képet, akkor egy egyszerű 3D-s keret jelenik meg, és az AutoSize illetve Intensity property-k értékét nem veszi figyelembe a megjelenítésnél.

BorderSize
Osztály: TGfxWindow
property BorderSize: integer;
A keret vastagságát adhatjuk meg. A keret tényleges vastagságához még hozzájön a Depth property értéke kétszeresen. Ha például egy 10 pixel széles keretet akarunk létrehozni, akkor a Depth*2+BorderSize = 10 eredményt kell hogy kapjuk. Ha 0-t adunk meg, akkor a keret háromszög, ellenkező esetben trapéz profilú lesz.

Depth
Osztály: TGfxWindow
property Depth: integer;
A 3D-s keret „mélységét”, vagy más néven az él letörés méretét adja meg ez a property. A világosabb illetve sötétebb részek szélessége illetve magassága ezzel a property-vel lesz egyenlő. Ha 0-t adunk meg, akkor az él letörés nem fog látszani, így egy egyszerű 2D-s keretet kapunk.

Style
Osztály: TGfxWindow
property Style: TGfxWindowStyle;
Ezzel a property-vel állíthatjuk be, hogy a keret domború, vagy süllyesztett megjelenésű legyen-e. A property értékei a következők lehetnek:
- wsRaised: domború keret;
- wsRecessed: süllyesztett keret.

AutoSize
Osztály: TGfxWindow
property AutoSize: boolean;
Ha a property értéke igaz, akkor a komponens méretét a Picture property-ben megadott kép méretéhez igazítja. Ez csak abban az esetben történhet meg, ha a property-ben van kép megadva.
Ha a property értéke hamis, akkor a komponenst tetszőlegesen átméretezhetjük, a képet nyújtással a komponens méretéhez igazítja.

Intensity
Osztály: TGfxWindow
property Intensity: integer;
Ebben a property-ben megadhatjuk a világosítás, illetve sötétítés mértékét százalékban. Ha 0-t adunk meg, akkor nem lesz változás az eredeti színhez képest, tehát a 3D-s keret nem is fog látszani. A maximális érték a 100, aminél viszont már nagyon kontrasztos hatást kapunk.

Transparent
Osztály: TGfxWindow
property Transparent: boolean;
Ha ennek a property-nek az értéke igaz, akkor a kép kereten belüli része teljesen átlátszó lesz, olyannyira, hogy a mögötte lévő komponensek is látszódni fognak, sőt használni is tudjuk azokat a „lyukon” keresztül.
Ahhoz, hogy a komponens megrajzolását el tudjuk végezni, felül kell írnunk a Paint eljárást. Ha nincs kép megadva, akkor egy egyszerű dupla keretet rajzolunk a Frame3D eljárással, de a Depth és BorderSize property-k felhasználásával.
Az nyilvánvaló, hogy a Picture property-ben tárolt képet nem módosíthatjuk, hiszen akkor a megjelenítést befolyásoló property-k értékének megváltoztatásakor mindig újra be kellene tölteni az eredeti képet, és újra módosítani az új értékeknek megfelelően. Szükség van tehát egy olyan bitképre, ami a komponenssel megegyező méretű, és ezt módosítjuk a keret tulajdonságainak megfelelően. Megtehetnénk azt is, hogy az eredeti képet rámásoljuk a komponens Canvas-ára, majd a Canvas-on végezzük el a szükséges módosításokat, de mivel itt pixelenként kell a módosításokat elvégezni, így ez már egy kisebb kép esetén is nagyon lassú lenne, ráadásul minden frissítésnél újra végre kellene hajtani.
A megoldás tehát az, hogy készítünk egy a komponens méretével megegyező méretű bitképet, majd erre ráfeszítjük az eredeti képet. Ezután egy ciklusban végigmegyünk a kép pixelein, és ahol szükséges, ott a pixelt elsötétítjük, vagy világosítjuk. A pixelenként történő feldolgozást jelentősen meggyorsítja a Scanline függvény használata.
Ha elkészült a keret, akkor ellenőrizzük a Transparent property értékét, és ha igaz, akkor a komponens kereten belüli részét átlátszóvá tesszük. Ezt az ún. régiók használatával tudjuk elérni. Készítünk két téglalap alakú régiót. Az egyik a komponens méretével megegyezik, míg a másik a belső rész méretével és pozíciójával azonos. A nagyobb régióból a CombineRgn függvénnyel kivonjuk a kisebb régiót, majd az eredményt a SetWindowRgn függvénnyel beállítjuk a Form-ra.
Ahhoz, hogy a komponens méretének változásait is figyelemmel tudjuk kísérni, felül kell írnunk a Resize eljárást. Ebben ellenőrizzük az AutoSize property értékét, és ha igaz, akkor a komponens méretét visszaállítjuk a kép méretére. Az eljárás végén meghívjuk a CreateFrame eljárást, ami létrehozza a keretet.