Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Плавный переход цвета из одного в другой   Найти похожие ветки 

 
McSimm2   (2003-06-11 10:33) [0]

Как осуществить сабж?


 
Юрий Федоров ©   (2003-06-11 10:51) [1]

Нашел вот такую функцию, она не моя, так что чур не ругаться :-)

procedure GradFill(xC: tCanvas; xR: tRect; Clr1, Clr2: TColor; xVert: boolean);
var
RGBFrom: array[0..2] of Byte; { from RGB values }
RGBDiff: array[0..2] of integer; { difference of from/to RGB values }
ColorBand: TRect; { color band rectangular coordinates }
I: Integer; { color band index }
R: Byte; { a color band"s R value }
G: Byte; { a color band"s G value }
B: Byte; { a color band"s B value }
begin
{ extract from RGB values}
RGBFrom[0] := GetRValue(ColorToRGB(Clr1));
RGBFrom[1] := GetGValue(ColorToRGB(Clr1));
RGBFrom[2] := GetBValue(ColorToRGB(Clr1));
{ calculate difference of from and to RGB values}
RGBDiff[0] := GetRValue(ColorToRGB(Clr2)) - RGBFrom[0];
RGBDiff[1] := GetGValue(ColorToRGB(Clr2)) - RGBFrom[1];
RGBDiff[2] := GetBValue(ColorToRGB(Clr2)) - RGBFrom[2];
{ set pen sytle and mode}
xC.Pen.Style:= psSolid;
xC.Pen.Mode:= pmCopy;
{ set color band"s left and right coordinates}
if xVert
then begin
ColorBand.Left:= xR.Left;
ColorBand.Right:= xR.Right;
end
else begin
ColorBand.top:= xR.top;
ColorBand.bottom:= xR.bottom;
end;
for I := 0 to $ff do
begin
{ calculate color band"s top and bottom coordinates}
if xVert
then begin
ColorBand.Top:=xR.top+ MulDiv (I, xR.bottom-xR.top, $100);
ColorBand.Bottom:=xR.top+ MulDiv (I + 1, xR.bottom-xR.top, $100);
end
else begin
ColorBand.left:=xR.left+ MulDiv (I, xR.right-xR.left, $100);
ColorBand.right:=xR.left+ MulDiv (I + 1, xR.right-xR.left, $100);
end;

{ calculate color band color}
R := RGBFrom[0] + MulDiv(I, RGBDiff[0], $ff);
G := RGBFrom[1] + MulDiv(I, RGBDiff[1], $ff);
B := RGBFrom[2] + MulDiv(I, RGBDiff[2], $ff);
{ select brush and paint color band}
xC.Brush.Color := RGB(R, G, B);
xC.FillRect(ColorBand);
{ xC.pen.Color := RGB(R, G, B);
if xVert
then with ColorBand do for j:=top to bottom do begin xC.MoveTo(left,j); xC.LineTo(right,j) end
else with ColorBand do for j:=left to right do begin xC.MoveTo(j,top); xC.LineTo(j,bottom) end;}
end;
end; { GradFill }
{***************************************************************************}


 
Dimka Maslov ©   (2003-06-11 10:54) [2]

http://delphibase.endimus.com/?action=viewfunc&topic=mediaimg&id=10438


 
McSimm2   (2003-06-11 13:08) [3]

Спасибо огромное...
А как выцепить из системных настроек винды 2 цвета перехода ??


 
Dimka Maslov ©   (2003-06-11 13:42) [4]

http://delphibase.endimus.com/?action=viewfunc&topic=sysparams&id=10008



Страницы: 1 вся ветка

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
14-84536
Yakudza
2003-06-06 13:24
2003.06.26
Изгнание беса и лягушек


1-84196
Димыч
2003-06-11 22:19
2003.06.26
Функции, процедуры...


1-84124
ray_wagner
2003-06-10 21:13
2003.06.26
Combobox????


1-84178
Yakudza
2003-06-07 20:52
2003.06.26
destAddress := PInAddr(pHostEn^.h_addr_list^)^;


3-83941
Stam
2003-05-23 10:26
2003.06.26
Ошибка при работе с Oracle - ORA-04031. Помогите...