Listing 2


//gibt auf einem beliebigen TCanvas einen Farbverlauf horizontal oder vertikal aus

procedure Verlauf(PCanvas: TCanvas; VRect: TRect; sc, ec: TColor; direction, wide: Byte);
var cv, vv, t: Integer;
      ra, ga, ba, re, ge, be, r, g, b: Byte;
      tr, tg, tb, cr, cg, cb: Extended;

begin

//Farb-Schritte t ermitteln

case direction of
   1: t:=Abs(VRect.bottom-VRect.top); //horizontal
   2: t:=Abs(VRect.right-VRect.left); //vertikal
end;

if t div wide<>t / wide then t:=t div wide + 1 else t:=t div wide;

ra:=GetRValue(sc);  //Anfangsfarbe in rot, grün, blau zerlegen
ga:=GetGValue(sc);
ba:=GetBValue(sc);

re:=GetRValue(ec); //Endfarbe in rot, grün, blau zerlegen
ge:=GetGValue(ec);
be:=GetBValue(ec);

tr:=(re-ra)/t;   //Diff. von Anfangs- und Endfarbwerten durch Farb-Schritte ergibt Schrittweite tg:=(ge-ga)/t; //(für jeweils rot, grün, blau)
tb:=(be-ba)/t;

r:=ra; cr:=ra;
g:=ga; cg:=ga;
b:=ba; cb:=ba;

vv:=0;
for cv:=0 to t-1 do
begin
PCanvas.Brush.Color:=RGB(r, g, b);
PCanvas.Pen.Color:=RGB(r, g, b);

case direction of
   1: PCanvas.Rectangle(VRect.left, VRect.top+vv, VRect.right, VRect.top+vv+wide);
   2: PCanvas.Rectangle(VRect.left+vv, VRect.top, VRect.left+vv+wide, VRect.bottom);
end;

cr:=cr+tr; r:=Round(cr);
cg:=cg+tg; g:=Round(cg);
cb:=cb+tb; b:=Round(cb);
vv:=vv+wide;
end;

end;

Zurück zur Hauptseite