HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Játék a színekkel


Példaprogram letöltése

4473 bájt

Ebben a példában játszunk egy kicsit a színekkel. Megismerkedünk néhány hasznos függvénnyel, melyek segítségével a színek értékét konvertálhatjuk szöveg, RGB és TColor típusok között. Készítünk egy példaprogramot, amely segítségével az RGB paletta bármely színét kikeverhetjük. A kikevert színről megtudhatjuk, hogy milyen RGB komponensei vannak, valamint, hogy milyen String érték tartozik hozzá.

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.

Cikksorozat

#IDKategóriaCikk címeSorozat
1621DelphiMySQL szerverek elérése Delphi-ből1. rész
1632DelphiMySQL szerverek elérése Delphi-ből2. rész
1641DelphiMySQL szerverek elérése Delphi-ből3. rész
1649DelphiMySQL szerverek elérése Delphi-ből4. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 49. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |