
A mellékelt példaprogram megnyitása előtt a FlatCheckBox.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A két komponens alapvetően nem sokban tér el egymástól, ezért érdemes egy közös osztályt létrehozni, amelyből származtatjuk őket. A komponensek a felhasználásukat tekintve megegyeznek az eredeti ChekBox komponensekkel, mégis érdemes a TCustomControl osztályból származtatni őket. A közös osztály a TCustmFlatCheckBox lesz.
Nézzük először, hogy milyen property-ket hoztunk létre. A BorderStyle property-ben megadhatjuk a jelölőnégyzet keretének stílusát. Összesen háromféle megjelenítési módja lehet, ezek a következők.
- bs3Dstyle: az eredeti 3D-s megjelenítés;
- bsFlat: egyszerű megjelenítés a BorderClor property-ben megadott színnel. A keret szélessége megegyezik az előzőével;
- bsFlatThick: ugyanaz, mint az előző, de a keret szélessége csak fele az előbbieknek.
A BorderColor property-ről már volt szó, de a komponens többi elemének a színét is megadhatjuk. A CheckBoxColor property a jelölőnégyzet háttérszínét határozza meg, a CheckSignColor pedig a bekapcsolt állapotot jelző jel színét. A jel képét a CheckSign property-ben tudjuk megadni. Ennek értéke kétféle lehet:
- csTick: az eredeti „pipa”;
- csCross: X jel (mint a CheckBox komponens ikonján a komponens palettán).
Ha az AutoSize property értéke igaz, akkor a komponens mérete automatikusan beállítódik úgy, hogy a jelölőnégyzet és a Caption property (vagyis a felirat) is teljes egészében látszódjon. A ReadOnly property-vel beállíthatjuk, hogy a komponens csak olvasható legyen, tehát a felhasználó nem tudja módosítani a Checked property értékét. Ez utóbbi property a CheckBox be-, illetve kikapcsolt állapotát jelzi.
Mivel a komponensnek van Caption property-je, ezért a Constructor-ban megadjuk a csSetCaption tulajdonságot is a ControlStyle property-ben. Ehhez szükség van még a CM_TEXTCHANGED üzenethez és egy üzenetkezelő eljáráshoz is. A felirat betűtípusát a Font property-ben lehet megadni. Ahhoz viszont, hogy ennek változásáról értesítést kapjunk, szükség lesz egy eljáráshoz a WM_FONTCHANGE üzenetre.
A komponens természetesen tudja birtokolni a fókuszt, amit a megjelenítésben jelezni is kell. Ahhoz viszont, hogy értesüljünk róla, hogy a komponens megkapta a fókuszt, vagy éppen elvesztette, a WM_SETFOCUS és a WM_KILLFOCUS üzenetekhez kell eljárásokat írnunk.
Az AutoSize property miatt szükség van rá, hogy értesüljünk a komponens méretének megváltozásáról is. Ehhez csupán a Resize eljárást kell felülírnunk.
Létrehozunk egy Change eljárást, amelyben az OnChange property-ben megadott eseménykezelő eljárást hívjuk meg.
A Checked property értékét a felhasználó a komponensre történő kattintással, vagy a billentyűzetről a szóköz illetve enter billentyűvel módosíthatja. Előbbihez csak a Click eljárást kell felülírni, utóbbihoz viszont a WM_KEYDOWN üzenethez kell eljárást készíteni.
A komponens megrajzolása a szokásos Paint eljárásban történik. A jelölőnégyzet megrajzolása a Windows által is használt Marlett betűtípussal történik, amelyben megtalálható a jelölőnégyzet megrajzolásához szükséges összes elem.
Az első komponens egyszerűen megoldható, csak a property-ket kell publikussá tenni. A másodiknál, mivel itt már adatbázis kapcsolat is van, sokkal több tennivaló van. Az adatbázis kapcsolat létesítéséhez szükség lesz egy TFieldDataLink típusú objektumra, valamint egy DataSource és egy DataField property-re. Ez utóbbihoz egy olyan property szerkesztőt is készítettünk, amely csak a Boolean típusú mezők megadását teszi lehetővé.