Delphi - Színek tárolása adatbázisban, DBColor komponens

forráskód letöltése
Egy adatbázisban többféle típusú adatot tudunk tárolni, a legtöbbnél meg tudunk adni egy mező típust, méretet az adat legoptimálisabb tárolásához. Ebben a cikkben egy olyan adatbázis szerepel, amelyben színeket tárolunk, és a DBGrid-ben a rekordok a tárolt színnel jelennek meg. Készítünk egy komponenst is, amellyel a mező színét tudjuk beállítani.
A mellékelt példaprogram megnyitása előtt a DBColor.pas-ban lévő komponenst telepítenie kell a Delphi alá.
Egy szín három színösszetevőből áll össze (piros, zöld, kék), melyeknek egyenként 0-255 értéke lehet, tehát egy-egy bájt. Egy színt tehát egy legalább hárombájtos számmal meg tudunk adni, így a szín tárolása egyszerűen megoldható egy integer típusú mezőben.
A komponenst a TCustomControl osztályból származtatjuk és leginkább egy gombbal kiegészített Edit-re fog hasonlítani. Ehhez szükség lesz egy BorderStyle property-re, valamint egy TButton-ra. A BorderStyle property-ben a komponens keretét állíthatjuk be.
A gombot a konstruktorban hozzuk létre, és az Align property értékét alRight-ra állítjuk. Így a gomb pozícionálásával és a magasságának beállításával nem kell külön foglalkozni, a szélességével azonban igen. Ezt a Resize eljárásban állítjuk be úgy, hogy a gomb szélessége és magassága egyenlő legyen. Azért választottunk Button és nem SpeedButton komponenst, mert így egyszerűen azt is megoldjuk, hogy a komponens a fókuszt is megkapja.
A színt a Color property-ben lehet megadni. A property-hez készítünk egy Get függvényt is, így felhasználhatjuk a TControl osztály Color property-jét anélkül, hogy újabb változót hoznánk létre, valamint így a szín egyben a komponens színét is meghatározza, tehát a megjelenítésről sem kell külön gondoskodnunk.
A gomb OnClick eseményéhez létrehozunk egy eljárást, amelyben egy ColorDialog-ot jelenítünk meg. Az Options és CustomColors property-k ennek a ColorDialog-nak az azonos nevű property-jeihez tartoznak.
A DataSource és DataFiled property-k megszokottak az adatbázishoz kapcsolódó komponenseknél, ez a komponens azonban használható adatbázis kapcsolat nélkül is.
Ha az AutoUpdate logikai property értéke igaz, akkor a beállított színt azonnal beírjuk az adatbázisba az UpdateRecord eljárással, míg ellenkező esetben ez csak akkor történik meg, amikor a komponens elveszíti a fókuszt.