|
|
Színátmenetes, villogó TLabel
|
|
Példaprogram letöltése
8126 bájt
|
Ha egy TLabel-ben megjelenített szöveg a felhasználó szempontjából fontos információt tartalmaz, akkor ezt valamilyen módon feltűnőbbé kell tenni. Megtehetjük ezt úgy is, ha a felirat színét, stílusát, méretét, stb. állítjuk be. Ennél sokkal jobb megoldás, ha a feliratot "mozgásba" hozzuk, vagy ahogy ebben a példában is tesszük: villogtatjuk.
A mellékelt példaprogram megnyitása előtt a FlashingLabel.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A feladat a következő: a TLabel-ben megjelenített szöveg színét folyamatosan változtatjuk két szín között, méghozzá úgy, hogy a két szín közötti meghatározott számú színt is felhasználjuk. Ezt úgy kell elképzelni, hogy készítünk egy meghatározott elemszámú színsorozatot, amelynek elemei a két megadott szín közötti színátmenet egy-egy színét tartalmazzák. Ebből a színsorozatból vesszük ki az index által meghatározott színt, és ezzel a színnel jelenítjük meg a feliratot. Az index folyamatosan nő, majd ha elértük a színsorozat utolsó elemét, akkor csökken. Az index meghatározott időközönként változik, ezzel a villogás (színváltás) sebességét befolyásoljuk.
Az FColor és FFlashColor property-k adják meg a színskála két szélső színét. Ezek között kell a színátmenetet létrehozni, amely az FSteps property-ben meghatározott számú elemből fog állni. A színskála színeit az FColorArray tömbben tároljuk. A színátmenetet elkészítő metódus a CreateColorArray.
procedure TFlashingLabel.CreateColorArray;
var
t:integer;
FCol:TColor;
FStepR, FStepG, FStepB:extended;
FRed, FGreen, FBlue:extended;
begin
Színösszetevőkre bontjuk a kiinduló színt:
FRed:=GetRValue(FFlashColor);
FGreen:=GetGValue(FFlashColor);
FBlue:=GetBValue(FFlashColor);
Kiszámoljuk, hogy mennyivel kell növelni lépésenként az adott színösszetevőt, hogy a színskála végére elérjünk a befejező színhez.
FStepR:=(GetRValue(FColor) - FRed) / FSteps;
FStepG:=(GetGValue(FColor) - FGreen) / FSteps;
FStepB:=(GetBValue(FColor) - FBlue) / FSteps;
Amíg elkészítjük a színskálát addig kikapcsoljuk a villogást, majd egy ciklusban feltöltjük a színskála-tömb elemeit:
FTimer.Enabled:=false;
for t:=1 to FSteps do begin
FCol:=RGB(Round(FRed), Round(FGreen), Round(FBlue));
FColorArray[t]:=FCol;
FRed:=FRed + FStepR;
FGreen:=FGreen + FStepG;
FBlue:=FBlue + FStepB;
end;
FTimer.Enabled:=FFlashing;
end;
Az FCurrentStep változóban tároljuk az aktuális szín sorszámát. A DoTimer eljárásban a Font property Color mezőjét beállítjuk az aktuális színskála elem értékére, majd az FCurrentStep property-t növeljük az FCurrentDir változó értékével, ami 1, vagy -1 lehet. Ha elértünk a színskála tömb utolsó eleméhez, akkor megfordítjuk az irányt, ami azt jelenti, hogy az FCurrentDir változó értéke -1 lesz. Ennek következtében ezentúl az FCurrentStep változó értéke csökken. Ha elérjük a színskála első elemét, akkor megint irányt váltunk.
procedure TFlashingLabel.DoTimer;
begin
Font.Color:=FColorArray[FCurrentStep];
FCurrentStep:=FCurrentStep+FCurrentDir;
if FCurrentStep>FSteps then begin
FCurrentStep:=FSteps;
FCurrentDir:=-1;
end;
if FCurrentStep<=1 then FCurrentDir:=1;
Invalidate;
end;
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 299. 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!
|