HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

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.
  yp:=Height div 2;
Ellenőrizzük, hogy az FMax értéke nem nulla-e, mivel ezzel osztani fogunk.
  if FMax=0 then FMax:=1;
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:
  for t:=0 to 1 do  begin
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;

Cikksorozat

#IDKategóriaCikk címeSorozat
3333WindowsNet Shell parancsok1. rész
3367WindowsNet Shell parancsok2. rész
3396WindowsNet Shell parancsok3. rész


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!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |