
A mellékelt példaprogram megnyitása előtt a ComponentIconTest.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A mellékelt komponensnek nem sok haszna van, csupán egy logikai property-vel rendelkezik. Arra viszont jó, hogy bemutassuk a komponens ikonjának megváltoztatását.
Először is tudnunk kell, hogy minden nem vizuális komponenshez tartozik egy ún. container ablak, ami a komponens ikonját jeleníti meg. Ezt az ablakot látjuk a Form-on, ezt mozgathatjuk a megfelelő pozícióba. Alapesetben ez az ablak a komponens palettán is látható képet jeleníti meg, de egy kis trükkel megoldhatjuk, hogy az ablakot mi magunk rajzoljuk meg. Persze erre csak szerkesztési időben van szükség, hiszen a nem vizuális komponensek pont attól nem vizuálisak, hogy futási időben nem látszódnak.
A feladat megoldásához először is szükségünk lesz egy ablak leíróra, amit az AllocateHWND függvénnyel kaphatunk meg. Ehhez a leíróhoz kell egy üzenetkezelő eljárás is, ez lesz a WndProc eljárás. Ebben az üzenetkezelő eljárásban csak a WM_PAINT üzenetet fogjuk lekezelni. Ha ezt az üzenetet kapjuk, akkor meghívjuk a SetCWndProc eljárást, amiben megkeressük a komponenshez tartozó ablakot. Ehhez az EnumChildWindows függvényt használjuk. Ha megtaláltuk az ablakot, akkor hozzárendeljük a CWndProc üzenetkezelő eljárást, amiben szintén csak a WM_PAINT üzenettel kell foglalkoznunk. Ennél az üzenetnél fogjuk megrajzolni a komponens képét. Ehhez persze szükség van az ablak Canvas-ának leírójára, ezt viszont egyszerűen lekérdezhetjük a GetWindowDC függvénnyel. Ezt felhasználva akár rajzolhatunk is Windows API függvényekkel, de megrajzolhatjuk a képet egy TBitmap objektumban is, amit azután átmásolunk az ablak Canvas-ára. Ezt tesszük a mellékelt példában is.