Говорят, в 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 dobegin{ 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;
Перевод контента на русский язык:
Это код на языке Pascal в среде Delphi, который реализует эффект заливки градиентом на канвасе. Процедура GradientRect принимает три параметра: FromRGB, ToRGB (тип TColor, представляющий начальный и конечный цвета градиента) и Canvas (объект TCanvas, который является поверхностью для заливки).
Шаг за шагом объясняется, что код делает:
Извлекаются RGB-значения из цвета FromRGB с помощью функций GetRValue, GetGValue и GetBValue.
Вычисляется разница между RGB-значениями FromRGB и ToRGB.
Устанавливается стиль пера на канвасе в виде сплошной линии и режим копирования.
Устанавливаются координаты левого и правого краев прямоугольника (ColorBand) в 0 и ширину клип-rectangles канваса, соответственно.
Проводится цикл по каждому пикселю градиента, перебирая значения от 0 до $ff (255).
Для каждого шага цикла вычисляются координаты верхней и нижней границ прямоугольника ColorBand на основе текущего значения пикселя.
Вычисляются цветовые значения для текущего пикселя, интерполяцией между RGB-значениями FromRGB и ToRGB.
Устанавливается цвет кисти в рассчитанный цвет и заливается прямоугольник ColorBand этим цветом.
Процедура объявлена как public, что позволяет ее вызывать из других частей программы.
В предоставленном коде процедура GradientRect вызывается на обработчик события OnPaint формы для заливки всей формы градиентом от синего до черного. Кроме того, реализуется обработчик события OnResize, который вызывает метод Paint при изменении размера формы.
В целом, этот код предоставляет основное реализацию эффекта заливки градиентом в Delphi.
В статье описывается процедура GradientRect, которая позволяет создавать градиентную заливку формы в программировании на языке Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.