
A mellékelt példaprogram megnyitása előtt a FlashingButton.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A FlashingButton komponens egy olyan gomb, amely képes a feliratát beállítható időközönként villogtatni. A villogás beállításánál meg kell adnunk két színt, a két szín közt használni kívánt árnyalatok számát és az átszínezés intervallumát.
A komponens a TSpeedButton osztályból származik. Szükség van két tulajdonságra, amelyekben a két színt eltároljuk. Ezek a HighColor és a LowColor tulajdonságok. A Step tulajdonság értéke határozza meg azt, hogy a két szín között hány darab árnyalatot fogunk megjeleníteni. Az Interval tulajdonságon keresztül állíthatjuk be azt az időt, amely két színváltoztatás között telik el. A Flashing tulajdonsággal pedig ki- és bekapcsolhatjuk a villogást.
Az átmeneti színeket célszerű előre eltárolni egy tömbben, amelynek tartalmát csak akkor kell módosítani, amikor a HighColor, LowColor vagy a Step tulajdonságok valamelyike megváltozik. Megtehetnénk azt is, hogy mindig kiszámoljuk az éppen aktuális színt (ekkor nem kellene tömb), de ez túl nagy erőforrás lekötést igényelne, lássuk be, feleslegesen.
procedure TFlashingButton.ColorArrayCreate;
begin
FIndex:=1;
r:=GetRValue(LowColor);
g:=GetGValue(LowColor);
b:=GetBValue(LowColor);
sr:=(GetRValue(HighColor) - r) / FStep;
sg:=(GetGValue(HighColor) - g) / FStep;
sb:=(GetBValue(HighColor) - b) / FStep;
for i:=1 to FStep do begin
FColorArray[i]:=RGB(Round(r), Round(g), Round(b));
r:=r + sr;
g:=g + sg;
b:=b + sb;
end;
end;
Az eljárás beállítja a színeket tároló FColorArray tömb elemeit. Ezt az eljárást meg kell hívni a Create, a SetHighColor, a SetLowColor és a SetStep metódusokban. Az FIndex egy Byte típusú változó, amely a tömb soron következő elemére fog mutatni, amikor kirajzoljuk a megfelelő színt. Az FIndex értéke 1 és Step között mozoghat.
A színek meghatározása úgy történik, hogy a LowColor és a HighColor színeket szétbontjuk RGB (vörös, zöld, kék) összetevőikre. Összetevőnként kiszámoljuk a lépések nagyságát a LowColor és a HighColor között, és ezekkel a lépésközökkel határozzuk meg a tömb egyes színeit.
A gomb feliratának színét egy Timer objektum segítségével változtatjuk meg. A Timer objektum OnTimer eseménye a következő.
procedure TFlashingButton.DoTimer;
begin
if FIndex>Step then FIndex:=1;
Font.Color:=FColorArray[FIndex];
Inc(FIndex);
Invalidate;
end;
Amikor végigértünk az FColorArray tömbön, akkor kezdjük a színezést elölről.
A Timer működését a Flashing tulajdonság igazra vagy hamisra állításával kapcsolhatjuk ki vagy be. Ha ezt a tulajdonságot hamisra állítjuk, akkor a gomb rendes SpeedButton-ként funkcionál tovább. Feliratának színe pedig az utoljára használt szín lesz.