HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Kitöltési effektusok a Form-on


Példaprogram letöltése

5033 bájt

Számos grafikai szerkesztő programban, de még a Word vagy az Excel programokban is találkozhatunk kitöltési effektusokkal. Készítünk egy komponenst, amely segítségével a Form-okon különböző színátmeneteket jeleníthetünk meg. Mi választhatjuk ki a színátmenet első és utolsó színét, valamint a kitöltési effektus irányát.

A mellékelt példaprogram megnyitása előtt a FormGradient.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponenst el kell helyeznünk a Form-on. A StartColor és az EndColor tulajdonságokban állíthatjuk be a színátmenet első és utolsó színét. A kitöltési effektus irányát a Gradient property-ben választhatjuk ki. A színezés történhet balról, jobbról, fentről, lentről, középről, valamint a négy sarokból.
Ahhoz, hogy a komponens átszínezze a Form-ot, meg kell hívnunk a PaintGradient metódust.
procedure PaintGradient;
Ha azt akarjuk, hogy a Form folyamatosan rendelkezzen színátmenettel, bármi történik, akkor a Form OnPaint és OnResize eseményeiben is hívjuk meg a PaintGradient metódust.
A színátmenetet bármikor törölhetjük a ClearGradient metódus meghívásával.
procedure ClearGradient;
A komponenst a TComponent osztályból származtatjuk.
A kitöltési effektusok megadásához létre kell hoznunk egy új típust.
TGradientType = (gLeft, gRight, gTop, gBottom, gCenter, gLeftUpper, gLeftLower, gRightUpper, gRightLower);
A PaintGradient metódusban kell leprogramoznunk, hogy a színátmeneteket milyen formában rajzoljuk ki, a Gradient tulajdonságban megadott értéknek megfelelően.
A színátmenetek meghatározásához a színeket szét kell bontanunk RGB összetevőikre, majd meg kell határoznunk, hogy hány színátmenetre van szükségünk a Form magasságának vagy szélességének függvényében.
Egy színnek például a vörös összetevőjét az alábbi módon határozhatjuk meg:
r:=GetRValue(StartColor);
Ha szétbontottuk a kezdőszínt, meg kell határoznunk, hogy hány darab színárnyalatra lesz szükségünk, így ki tudjuk számolni az átmenetek közti lépésközt. Ez a Gradient tulajdonság értékének megfelelően változó. Egy Case szerkezet segítségével el kell ágaztatnunk a programot, hogy minden lehetséges beállítás esetén kiszámoljuk a színek közötti lépésközt.
gLeftUpper, gLeftLower, gRightUpper, gRightLower: begin
sr:=(GetRValue(EndColor)-r)/((Owner as TForm).ClientWidth+2)/2;
sg:=(GetGValue(EndColor)-g)/((Owner as TForm).ClientWidth+2)/2;
sb:=(GetBValue(EndColor)-b)/((Owner as TForm).ClientWidth+2)/2;
Ratio:=(Owner as TForm).ClientWidth/(Owner as TForm).ClientHeight;
end;
A fenti kódrészlet a sarkokból induló kitöltések lépésközét határozza meg, színösszetevőként. A Ratio változóban a Form szélességének és a magasságának az arányát tároljuk el. Erre a kitöltés megrajzolásánál lesz szükségünk. Ez alapján tudunk majd az átlóval párhuzamos vonalakat húzni.
A következő lépés ismét egy Case elágazás. Most meg kell rajzolnunk az egyes színátmeneteket. A színátmeneteket vonalakból építjük fel. A vonalakat for ciklusok segítségével rajzolhatjuk meg a legkönnyebben.
A gLeft, GRight, gTop, és gBottom beállítások esetén egyszerű dolgunk van, mert csak függőleges vagy vízszintes vonalakat kell húzni.
A bonyolítás ott kezdődik, amikor a sarkokból kiindulva kell megrajzolni a vonalakat, párhuzamosan az átlóval. Itt képzeletben ketté kell bontanunk a Form-ot, két háromszögre az átló mentén. A színátmeneteket a két háromszögben külön tudjuk megrajzolni, két külön for ciklus segítségével. A magassági koordináta megadásánál a Form szélességének és magasságának az arányát is figyelembe kell vennünk. Ezt a hányadost tároltuk el a Ratio változóban.
A legnehezebb a középről kiinduló kitöltést megrajzolni. Itt képzeletben meg kell feleznünk a Form-ot szélességében és magasságában is. Így kapunk négy téglalapot, amelyeket külön-külön a sarkokból induló kitöltések algoritmusával ki tudunk színezni. Ehhez 4x2 db for ciklusra van szükség. Figyelnünk kell a megfelelő koordináta transzformációkra.
Ha végeztünk a rajzolással, frissítenünk kell a Form-on elhelyezkedő komponenseket, mivel a rajzolás során azok is lefestésre kerülnek.
for i:=0 to (Owner as TForm).ControlCount-1 do
  (Owner as TForm).Controls[i].Refresh;
A ClearGradient metódusban a Form-ot újra átfestjük, de ez alkalommal a saját színével.
with (Owner as TForm).Canvas do begin
  Brush.Color:=(Owner as TForm).Color;
  FillRect(Rect(0,0,(Owner as TForm).ClientWidth,(Owner as TForm).ClientHeight));
end;
A festés után itt is frissítenünk kell a komponenseket.

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 58. 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 |