A Delphi tartalmaz néhány hasznos függvényt a színek kezelésére. Egy szín megadható LongInt típusú számértékkel, RGB összetevőinek értékeivel, vagy akár szövegként is. Néhány színhez konstans érték tartozik, mint például clBlack. Most megvizsgálunk néhány függvényt, amelyek színekkel végeznek műveleteket.
Az RGB függvény
function RGB(Red, Green, Blue: Byte): Cardinal;
A függvény használatával RGB komponensek segítségével adhatunk meg egy színt.
Az RGB színek három komponensből épülnek fel. Ezek a paraméterlistában szereplő értékeknek megfelelően: vörös, zöld és kék. Mindegyik színkomponens értéke 0-255 intervallumban mozoghat. A függvény a komponensekkel meghatározott színt adja vissza eredményül.
Panel1.Color:=RGB(tbRed.Position,tbGreen.Position,tbBlue.Position);
A ColorToRGB függvény
function ColorToRGB(Color: TColor): Longint;
Az előző függvénynek éppen az ellenkezője. Visszatérési értéke a megadott Color színhez tartozó RGB érték. Ha meg akarjuk tudni az egyes RGB komponensek külön értékét, akkor az eredményül kapott LongInt típusú számot szét kell bontanunk. Az eredményül kapott számban a kék komponens értéke 65536-os, a zöld 256-os, végül a vörös egyszeres szorzóval szerepel.
Az l, LongInt típusú változóban tároljuk el a ColorToRGB függvény értékét.
l:=ColorToRGB(Panel2.Color);
Az l értéke legyen most 3612723. Ezt bontsuk le a 3 színkomponensre.
A kék komponens értéke 3612723 div 65536 lesz, azaz 55. Miután meghatároztuk a kék összetevő értékét, az l számot csökkentenünk kell 55*65536-al. Az l értéke éppen az előző osztás maradék része lesz, azaz 3612723 mod 65536=8243.
A zöld összetevő értéke: 8243 div 256=32. Az l értékét ismételten csökkentenünk kell. Az l új értéke 8243 mod 256, azaz 51.
A maradék 51 már a vörös összetevő értéke lesz.
A ColorToString függvény
function ColorToString(Color: TColor): string;
A függvény egy megadott szín értékének szöveges megfelelőjét adja eredményül. Ha a megadott színhez a rendszerben van hozzárendelt név, akkor a visszatérési érték ezt adja vissza. Ha a szín nem rendelkezik névvel, akkor a függvény értéke a következő formájú: $00188821.
A függvény eredményét bármilyen String-ben eltárolhatjuk. A példaprogramban egy Edit mezőt használtunk az eredmény megjelenítésére.
eColor.Text:=ColorToString(RGB(tbRed.Position,tbGreen.Position,tbBlue.Position));
A StringToColor függvény
function StringToColor(const S: string): TColor;
A függvény a ColorToString ellenkezője. Szöveges formátumban megadott színt konvertál TColor típusúvá. Az S paraméterben megadhatjuk egy szín nevét, ha az a rendszerben létezik, vagy használhatjuk a : $00188821 formátumot.
Panel2.Color:=StringToColor(cbColors.Text);
A ColorToIdent függvény
function ColorToIdent(Color: Longint; var Ident: string): Boolean;
Ha a Color paraméterben megadott színhez létezik a rendszerben egy azonosító név, akkor azt az Ident változóban adja vissza értékül. Ha a rendszerben a Color értékű színhez van azonosító rendelve, akkor a függvény visszatérési értéke igaz, ellenkező esetben hamis.
Egy hozzárendelt nevet megjeleníthetünk például az alábbi algoritmussal.
if ColorToIdent(Panel1.Color,s) then
LColorToIdent.Caption:=s
else
lColorToIdent.Caption:='Nincs hozzárendelve érték.';
Az IdentToColor függvény
function IdentToColor(const Ident: string; var Color: Longint): Boolean;
A ColorToIdent párja. Az Ident paraméterben megadott névhez tartozó színt adja értékül a Color paraméterben megadott változónak. A függvény visszatérési értéke igaz, ha a megadott név létezik, ellenkező esetben hamis.
A GetColorValues eljárás
procedure GetColorValues(Proc: TGetStrProc);
Az eljárás lekérdezi a rendszerben található színekhez rendelt neveket. Minden egyes alkalommal, amikor talál egy újabb nevet, lefut a Proc paraméterben megadott callback eljárás tartalma.
A példaprogramban az eljárást a következő módon hívhatjuk meg.
GetColorValues(GetColors);
A GetColors maga is egy eljárás, az alábbi formával és tartalommal.
procedure TForm1.GetColors(const S: string);
begin
cbColors.Items.Add(S);
end;
A GetColorValues függvény Proc paraméterében megadott eljárásnak ugyanazzal a paraméterlistával kell rendelkeznie, amit a GetColors eljárásban használtunk.
A példaprogramban a GetColors eljárást használtuk fel arra, hogy a cbColors ComboBox-ba betöltsük a színek neveit.