1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
procedure GradVertical(Canvas: TCanvas; Rect: TRect; FromColor, ToColor: TColor);
var
y: Integer;
dr, dg, db: Extended;
C1, C2: TColor;
r1, r2, g1, g2, b1, b2: Byte;
R, G, B: Byte;
cnt: Integer;
RectMiddle: Integer;
begin
C1 := FromColor;
r1 := GetRValue(C1);
g1 := GetGValue(C1);
b1 := GetBValue(C1);
C2 := ToColor;
r2 := GetRValue(C2);
g2 := GetGValue(C2);
b2 := GetBValue(C2);
dr := (r2 - r1) / Rect.Bottom - Rect.Top;
dg := (g2 - g1) / Rect.Bottom - Rect.Top;
db := (b2 - b1) / Rect.Bottom - Rect.Top;
cnt := 0;
RectMiddle := Rect.Top + (Rect.Bottom - Rect.Top) div 2;
for y := 0 to (Rect.Bottom - Rect.Top) div 2 do begin
R := r1 + Ceil(dr * cnt);
G := g1 + Ceil(dg * cnt);
B := b1 + Ceil(db * cnt);
Canvas.Pen.Color := RGB(R, G, B);
Canvas.MoveTo(Rect.Left, RectMiddle + y);
Canvas.LineTo(Rect.Right, RectMiddle + y);
Canvas.MoveTo(Rect.Left, RectMiddle - y);
Canvas.LineTo(Rect.Right, RectMiddle - y);
inc(cnt);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
lBitmap:TBitmap;
i:integer;
begin
lBitmap:=TBitmap.Create;
lBitmap.Height:=24;
lBitmap.Width:=180;
GradVertical(lBitmap.Canvas,lBitmap.Canvas.ClipRect,clWhite, clBlack);
for i := 0 to 9 do begin
lBitmap.Canvas.Brush.Style := bsClear;
lBitmap.Canvas.TextOut(i*18,5, IntToStr(i));
end;
MyCounter.UserBitmap:= lBitmap;
end; |
Partager