HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Mozgó keret


Példaprogram letöltése

4760 bájt

Számos weboldalon találkozhatunk reklámhirdetésekkel, amelyek valamilyen módon mozognak, és ezzel keltik fel a figyelmünket. Ha a felhasználó figyelmét rá szeretnénk irányítani valamire, használható megoldásnak tűnik, hogy mozgassuk azt a valamit, vagy legalább a környezetét. Készítünk egy mozgó keret komponenst, amelyet a Bevel komponenshez hasonlóan, bármi mögött elhelyezhetünk.

A mellékelt példaprogram megnyitása előtt a MovingBorder.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens, működését tekintve, ugyanolyan, mint a Bevel komponens. A háttérben elhelyezve, keretet képezhetünk vele, valami számára.
A komponens alján és tetején megjelenik egy-egy színátmenetekből álló csík. Ennek a csíknak a vastagságát a BorderWidth property segítségével állíthatjuk be.
A színcsíkok színátmenetet képeznek két szín között. Ezt a két színt a StartColor és az EndColor tulajdonságokban adhatjuk meg. A két szín közti árnyalatok számát a komponens szélessége határozza meg.
Ha a Moving tulajdonság értékét igazra állítjuk, a színátmenet elkezd mozogni, balról jobbra. Hamis érték megadásával a mozgás leáll.
A mozgás sebességét az Interval property értéke szabályozza.
A komponenst a TGraphicControl osztályból származtatjuk.
A mozgó színárnyalatok alapvető működési elve az, hogy létrehozunk egy színeket tároló tömböt, amelynek tartalmát a Paint metódus felülírásával csak kirajzolunk a Canvas-ra. Egy időzítő segítségével a tömbben elhelyezkedő színeket mindig eggyel előrébb csúsztatjuk, a tömb végén kieső szín pedig újra bekerül az első helyre. Ezáltal a keret mozgás hatását kelti.
A mozgatás ütemezését és a színek mozgatását egy Timer komponens OnTimer eseményében hajtjuk végre.
Nem tudjuk előre a szükséges színek számát, ezért azok tárolásához egy dinamikus tömbre van szükségünk, amelyet az alábbi módon deklarálhatunk:
FColorArray : array of TColor;
A tömböt mindig a ColorArrayCreate metódusban töltjük fel értékekkel. Ezt a metódust mindig meg kell hívnunk, ha a StartColor vagy az EndColor bármelyike megváltozik, és akkor is, amikor a komponens átméretezésre kerül.
A ColorArrayCreate metódus
Ahhoz, hogy a StartColor-ban és az EndColor-ban megadott színek közti átmeneteket meg tudjuk határozni, először a színeket vörös – zöld – kék összetevőkre kell bontanunk.
Például a StartColor vörös összetevőjét az alábbi módon tudjuk meghatározni.
r:=GetRValue(StartColor);
Ha megvannak az egyes összetevők, akkor meg kell határoznunk a színátmenetek közti lépésközt, színkomponensenként.
sr:=(GetRValue(EndColor)-r)/(Width div 3);
A léptéket úgy állítjuk be, hogy minden egyes színárnyalat 3 képpont széles legyen, és az egymásmellé rajzolt színárnyalatok pontosan lefedjék a komponens szélességét.
Ennek a 3 képpontos méretnek megfelelően állítjuk be a színeket tároló tömb méretét is.
SetLength(FColorArray,Width div 3);
A tömböt egy for ciklus segítségével fel tudjuk tölteni a színárnyalatokkal. Elindulunk a StartColor színösszetevőitől, és a ciklus minden egyes lefutásakor növeljük azok értékét a lépésközzel.
Szükségünk van egy olyan metódusra, amely az időzítő futásakor mindig elmozdítja a színeket a tömbben. Ezt a MoveColors metódus fogja végrehajtani. A MoveColors-t az FTimer objektum OnTimer eseményében kell meghívnunk.
A Paint metódus
A színátmenetek kirajzolásához felül kell írnunk a Paint metódust.
A komponens szélessége bármikor változhat, ezért erre figyelnünk kell. Az FLastWidth változóban eltároljuk a komponens előző szélességét. A változó értékét mindig a ColorArrayCreate metódus állítja be. A Paint metódusban csak annyi a dolgunk, hogy az FLastWidth értékét mindig összehasonlítsuk a Width értékkel.
if Width<>FLastWidth then
  ColorArrayCreate;
Ha a kettő nem egyezne meg, akkor új színskálára van szükségünk.
Mivel a színskála már rendelkezésünkre áll és annak mozgását az FTimer objektum vezérli, itt nincs más dolgunk, mint egy for ciklus segítségével megrajzolni az alsó és felső csíkot, az FBorderWidth property értékében megadott vastagsággal. A színeket az FColorArray tömbben szereplő sorrendjük alapján kell felhasználnunk.
for i:=0 to Length(FColorArray)-1 do
  begin
  Canvas.Brush.Color:=FColorArray[i];
  Canvas.FillRect(Rect(i*3,0,i*3+3,FBorderWidth));
  Canvas.FillRect(Rect(i*3,Height-FBorderWidth,i*3+3,Height));
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
2535C#Oracle adatbázis-elérés alapjai1. rész
2546C#SQL utasítások végrehajtása2. rész
2557C#Tárolt eljárások és függvények fejlesztése3. rész
2565C#Csomagok fejlesztése4. rész
2573C#Adatbázis triggerek fejlesztése5. rész
2581C#Kivételek kezelése PL/SQL-ben6. rész
3276C#Kurzorok deklarálása PL/SQL-ben7. rész
3297C#Tömb adattípus létrehozása és kezelése PL/SQL-ben8. rész
3326C#Adatbevitel tömb-adattípussal rendelkező oszlopokba9. rész
3357C#Adattárolás beágyazott tábla-típusú oszlopokban10. rész
3388C#Adatok beszúrása beágyazott táblákba11. rész
3418C#Index létrehozása PL/SQL-ben12. rész
3444C#Szekvenciák használata13. rész
3488C#Adatok betöltése állományokból14. rész
1765DelphiOracle adatbázis-elérés alapjai15. rész
1774DelphiSQL utasítások végrehajtása16. rész
1784DelphiTárolt eljárások és függvények fejlesztése17. rész
1794DelphiCsomagok fejlesztése18. rész
1803DelphiAdatbázis triggerek fejlesztése19. rész
1815DelphiKivételek kezelése PL/SQL-ben20. rész
3256DelphiKurzorok deklarálása PL/SQL-ben21. rész
3287DelphiTömb adattípus létrehozása és kezelése PL/SQL-ben22. rész
3318DelphiAdatbevitel tömb-adattípussal rendelkező oszlopokba23. rész
3348DelphiAdattárolás beágyazott tábla típusú oszlopokban24. rész
3377DelphiAdatok beszúrása beágyazott táblákba25. rész
3408DelphiIndex létrehozása PL/SQL-ben26. rész
3436DelphiSzekvenciák használata27. rész
3467DelphiAdatok betöltése állományokból28. rész


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