|
|
Gradient ProgressBar komponens
|
|
Példaprogram letöltése
6826 bájt
|
Ebben a példában egy olyan ProgressBar komponenst készítünk, melynek háttere színátmenetes és az aktuális értékét százalékosan is kijelzi. A színátmenetnél természetesen mi rendelkezhetünk azokról a színekről, melyek között az átmenet megvalósul.
A mellékelt példaprogram megnyitása előtt a GrdProgressBar.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A komponens igazi újítást csupán a megjelenésben hoz, az indikátor sávot színátmenettel rajzolja meg. A komponens kirajzolását (mint általában) a Paint eljárás végzi.
procedure TGrdProgressBar.Paint;
var xp:array[0..1] of integer;
yp, xt, yt, t:integer;
vert: array[0..1] of TRIVERTEX;
gr: TGradientRect;
col, shcol:TColor;
percent:integer;
percstr:string;
begin
inherited;
A betűtípust az FFont property-ben tároljuk, ezt átadjuk a komponens canvas-ának.
Canvas.Font.Assign(FFont);
Kiszámítjuk a középvonal koordinátáját, amit úgy kapunk meg, hogy a komponens magasságát elosztjuk 2-vel.
Ellenőrizzük, hogy az FMax értéke nem nulla-e, mivel ezzel osztani fogunk.
Kiszámoljuk, hogy az FPosition property-ben megadott értéke hány %-a az FMax-nak.
percent:=Round(FPosition*100/FMax);
Az xp két elemű tömbben tároljuk a kirajzolandó sávok jobb szélének X koordinátáját. Először a teljes komponens területére rajzolunk egy sávot a háttérszínnel, majd csak egy akkora sávot, ami az előbb kiszámolt százaléknak felel meg a komponens szélességéhez képest.
xp[0]:=Width;
xp[1]:=Round(Width*(percent/100));
Indítunk egy ciklust 0-tól 1-ig:
Ha t=0, akkor a háttérszínnel, ellenkező esetben a rendes színnel rajzoljuk meg a színátmenetet.
if t=0 then begin
col:=ColorToRGB(FBgColor);
shcol:=ColorToRGB(FBgShadowColor);
end else begin
col:=ColorToRGB(FColor);
shcol:=ColorToRGB(FShadowColor);
end;
Beállítjuk a színátmenet rajzolásához szükséges paramétereket.
with vert[0] do begin
x:=0;
y:=0;
Red:=GetRValue(shcol)*256;
Green:=GetGValue(shcol)*256;
Blue:=GetBValue(shcol)*256;
Alpha:=0;
end;
with vert[1] do begin
x:=xp[t];
y:=yp;
Red:=GetRValue(col)*256;
Green:=GetGValue(col)*256;
Blue:=GetBValue(col)*256;
Alpha:=0;
end;
gr.UpperLeft:=0;
gr.LowerRight:=1;
Megrajzoljuk a színátmenetet, de először csak a felső részét.
GradientFill(Canvas.Handle, @vert, 2, @gr, 1, GRADIENT_FILL_RECT_V);
A színátmenet alsó részéhez beállítjuk a szükséges paramétereket.
vert[0].y:=Height;
vert[1].y:=yp;
gr.UpperLeft:=1;
gr.LowerRight:=0;
GradientFill(Canvas.Handle, @vert, 2, @gr, 1, GRADIENT_FILL_RECT_V);
end;
Az FShowText paraméter True értéke esetén kiírjuk a százalékértéket a komponens közepére.
if FShowText then begin
percstr:=IntToStr(percent)+' %';
xt:=(Width div 2) - (Canvas.TextWidth(percstr) div 2);
yt:=(Height div 2) - (Canvas.TextHeight(percstr) div 2);
Canvas.Brush.Style:=bsClear;
Canvas.TextOut(xt, yt, percstr);
end;
end;
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 264. 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!
|