procedure TColorLamp.Paint;
var Blend:TBlendFunction;
pw:integer;
r:TRect;
begin
inherited;
Először kirajzolunk egy kört, melyet az FColor property-ben meghatározott színnel színezünk ki. Ha a komponens szélessége és magassága nem egyezik meg, akkor a rajz ellipszis lesz.
with Canvas do begin
Brush.Color:=ColorToRGB(FColor);
Brush.Style:=bsSolid;
Pen.Width:=1;
Pen.Color:=FColor;
Ellipse(ClientRect);
end;
Ha az FShadow property értéke True, akkor az AlphaBlend függvénnyel kirajzoljuk a szürkeárnyalatos képet a komponens fölé 50%-os átlátszósággal. Az 50%-os átlátszóságot úgy állítjuk be, hogy a Blend változó SourceConstantAlpha mezőjének értékét 128-ra állítjuk be.
if FShadow then begin
Blend.BlendOp:=0;
Blend.BlendFlags:=0;
Blend.SourceConstantAlpha:=128;
Blend.AlphaFormat:=AC_SRC_OVER;
AlphaBlend(
Canvas.Handle, 0, 0, Width, Height,
FShadowBmp.Canvas.Handle, 0, 0, FShadowBmp.Width, FShadowBmp.Height,
Blend);
end;
Ha az FOutline property értéke True, akkor még egy fekete körvonalat is rajzolunk. Ennek vastagságát a komponens méretétől tesszük függővé.
if FOutline then begin
pw:=Round((Width+Height)/63);
r:=ClientRect;
r.Left:=r.Left+pw div 2;
r.Right:=r.Right-pw div 2;
r.Top:=r.Top+pw div 2;
r.Bottom:=r.Bottom-pw div 2;
with Canvas do begin
Brush.Style:=bsClear;
Pen.Color:=clBlack;
Pen.Width:=pw;
Ellipse(r);
end;
end;
end;