Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Курс видеоуроков КРЭКЕРСТВО + ПРОГРАММИРОВАНИЕ 2017
(актуальность: май 2017)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Градиентная заливка формы


Говорят, в Windows 95 дружественный интерфейс. Hо почему учебник на 1000 страниц?!

Процедура GradientRect делает градиентную заливку (сверху в низ). Параметры: цвета [от и до] и объект Canvas, поверхность которого и будет закрашена


 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.Left := 0;
   ColorBand.Right:= canvas.ClipRect.Right-Canvas.ClipRect.Left;
 
   for I := 0 to $ff do
   begin
     { calculate color band's top and bottom coordinates}
     ColorBand.Top := MulDiv (I , canvas.ClipRect.Bottom-Canvas.ClipRect.Top, $100);
     ColorBand.Bottom := MulDiv (I + 1,canvas.ClipRect.Bottom-Canvas.ClipRect.Top, $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;
 

Эту процедуру объявляем в публичных объявлениях:


 public
   { Public declarations }
   procedure GradientRect(FromRGB, ToRGB: TColor; Canvas: TCanvas);
 

Для закраски формы в обработчик формы OnPaint нужно вставить:


 GradientRect (clBlue, clBlack, Canvas);
 

По событию OnResize для формы напишем:


 Paint;
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS