![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Градиентная заливка формы [D6, WinXP]
Дана © (2004-06-08 21:51:00)Подскажите, пожалуйста, как сделать градиентную заливку формы из левого верхнего ула в правый нижний. Горизонтальный и вертикальный градиент могу сделать, а начсёт этого - никаких идей. А очень надо :)
Буду признательна за помощь.
Amoeba (2004-06-09 11:31:00) [1]
> Dimaxx (08.06.04 23:26) [5]
Согласен, лучше всего воспользоваться отличной библиотекой LMDTools. Поддерживает кучу стилей градиентной заливки. Сокращенная версия библиотеки бесплатная, окажется полезной во многих случаях.
http://www.lmdinnovative.com/
Полную версию с исходниками (нет Help'а) можно взять на
http://www.tdelphi.spb.ru
Там еще можно найти на халяву массу библиотек.
Dimaxx (2004-06-08 23:26:00) [2]В LMD есть очень мощная система градиентов. Могу выслать модуль с этими градиентами.
Дана (2004-06-08 22:20:00) [3]
> Вот, кто-то уже обо всем давно позаботился:
> http://www.delphimaster.ru/articles/grad/index.html
Статья классная, но только того, что мне надо там нет... :(
Дана (2004-06-08 22:08:00) [4]Вот горизонтальный.
procedure TForm1.GradientRect (FromRGB, ToRGB: TColor; Canvas: TCanvas);
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 (FromRGB));
RGBFrom[1] := GetGValue (ColorToRGB (FromRGB));
RGBFrom[2] := GetBValue (ColorToRGB (FromRGB));
{ calculate difference of from and to RGB values}
RGBDiff[0] := GetRValue (ColorToRGB (ToRGB)) - RGBFrom[0];
RGBDiff[1] := GetGValue (ColorToRGB (ToRGB)) - RGBFrom[1];
RGBDiff[2] := GetBValue (ColorToRGB (ToRGB)) - RGBFrom[2];
{ set pen sytle and mode}
Canvas.Pen.Style := psSolid;
Canvas.Pen.Mode := pmCopy;
{ set color band's left and right coordinates}
ColorBand.top := 0;
ColorBand.bottom:= canvas.ClipRect.Bottom-Canvas.ClipRect.Top;
for I := 0 to $ff do
begin
{ calculate color band's right and left coordinates}
ColorBand.Left := MulDiv (I , canvas.ClipRect.Right-Canvas.ClipRect.Left, $100);
ColorBand.Right := MulDiv (I + 1,canvas.ClipRect.Right-Canvas.ClipRect.Left, $100);
{ 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}
Canvas.Brush.Color := RGB (R, G, B);
Canvas.FillRect (ColorBand);
end;
end;
Minori (2004-06-08 22:06:00) [5]Вот, кто-то уже обо всем давно позаботился:
http://www.delphimaster.ru/articles/grad/index.html
Andy BitOff (2004-06-08 22:01:00) [6]А как горизонтальный делаешь?