Delphi - Szín paletta komponens készítése

forráskód letöltése
Ebben a példában készítünk egy olyan komponenst, mely 256 különböző true-color színt képes egyidőben megjeleníteni. A felhasználó ezekből választhat egy tetszőlegest. Ebben a példában készítünk egy olyan komponenst, mely 256 különböző true-color színt képes egyidőben megjeleníteni. A felhasználó ezekből választhat egy tetszőlegest.


A mellékelt példa megnyitása előtt a ColorPaletta.pas-ban lévő komponenst telepítenie kell a Delphi-be.

A komponenst a TCustomControl-ból származtatjuk. Létrehozunk benne egy FBuffer nevű tömböt, melynek minden eleme TColor típusú. Itt fogjuk eltárolni a 256 színt, melyet a példa egyszerűsítése miatt most csak véletlenszerű értékekkel töltünk fel a constructor-nál. A feltöltés mellett még be kell állítanunk a komponens méretét is, mivel a TCustomControl-nál ez mindkét irányban nulla. Most mi 16 x 4-es elrendezést választunk. Az egyes színeket befoglaló téglalapok méretét a ITEMHEIGHT, ITEMWIDTH konstansokban tároltuk el.

A felhasználó az egér lenyomásával választhat a színek közül, így szükséges, hogy létrehozzunk egy OnMouseMove eseményt kezelő eljárást, melyet DoMouseMove névvel teszünk meg. Az esemény kezelőt szintén itt a constructor-ban kell hozzárendelnünk az eseményhez.

Az objektum megjelenítéséhez a Paint eljárást kell felülírnunk.
Kirajzolásnál egy kettős ciklussal végigmegyünk a 16 x 4-es elrendezésen és kirajzoljuk mind a 256 színű téglalapot.

A kiválasztott elem koordinátáját a selectedx, selectedy változókban tároljuk. Ezt az elemet a kirajzolás elvégzése után körbekeretezzük, hogy a felhasználó is láthassa azt.

A egér gombjának lenyomásakor a DoMouseDown esemény kezelőnél az egér koordinátája és a téglalapok mérete alapján meghatározzuk a kiválasztott elemet és létrehozzuk a komponensünk OnChange eseményét, jelezve, hogy megváltozott az aktuálisan kiválasztott elem.

Az Unit1.pas-ban ezt az eseményt használjuk fel arra, hogy lekérdezzük a komponenstől az aktuálisan kiválasztott színt, melyhez létrehozunk egy SelectedColor nevű property-t.