Ваш браузер устарел. Рекомендуем обновить его до последней версии.




 



 


Delphi

 

 


Урок 20     Рисование с помощью графических примитивов

Canvas – холст, который позволяет нам иметь доступ к любой точке экрана. Canvas не является компонентом, это свойство некоторых компонентов в том числе и формы. Canvas имеет обширный набор методов, это такие как Pen, Brush, Ellipse, Rectangle, Pixels, MoveTo, LineTo, TextOut, Font и другие. Свойство Canvas является основой графической подсистемы Delphi. У свойств Pen и Brush есть важное свойство Color задающее цвет. Его значения можно задавать из палитры цветов с префиксом cl. Например, clRed назначает красный цвет. Желательно использовать более богатую палитру RGB имеющая следующий формат RGB(красный, зеленый, синий). Эти три значения могут варьироваться от 0 до 255. Например, RGB(190, 0, 230) выдаст светло-фиолетовый цвет. В этой палитре всего 2 ^ 24 = 16.777.216 цветов и оттенков.

Пример 1     Для построения приложения на стартовой форме разместите восемь кнопок. Каждая кнопка будет выводить на экран соответствующую геометрическую фигуру. Одна из них очищает экран. Обратите внимание на комментарии в программе. Поэкспериментируйте с параметрами методов, изменяя их значения. 

 

unit Unit13;

interface

uses
        Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
        Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;   

type
    TForm13 = class(TForm)

        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Button6: TButton;

  procedure Button1Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);
  procedure Button3Click(Sender: TObject);
  procedure Button4Click(Sender: TObject);
  procedure Button5Click(Sender: TObject);
  procedure Button6Click(Sender: TObject);

    private
        { Private declarations }
    public
        { Public declarations }
    end;

var
        Form13: TForm13;

implementation

{$R *.dfm}

procedure TForm13.Button1Click(Sender: TObject);
begin
        Canvas.Brush.Color := clWhite; // цвет кисти
        Canvas.FillRect(Canvas.ClipRect); // очистка канвы
end;

procedure TForm13.Button2Click(Sender: TObject);
begin
        Canvas.Pen.Color := clGreen; // цвет пера
        Canvas.Brush.Color := clSkyBlue; // цвет кисти
        // прямоугольник
        Canvas.Rectangle(50, 50, 200, 300);
end;

procedure TForm13.Button3Click(Sender: TObject);
begin
        Canvas.Pen.Color := clRed;
        Canvas.Brush.Color := RGB(255,0,150);
        // прямоугольник
        Canvas.Rectangle(100, 150, 400, 320);
end;

procedure TForm13.Button4Click(Sender: TObject);
begin
        Canvas.Pen.Color := clBlack;
        Canvas.Brush.Color := clYellow;
        // эллипс
        Canvas.Ellipse(50, 100, 380, 300);
end;

procedure TForm13.Button5Click(Sender: TObject);
begin
        Canvas.Pen.Color := clBlack;
        Canvas.Brush.Color := RGB(0,255,150);
        // эллипс
        Canvas.Ellipse(150, 20, 400, 150);
end;

procedure TForm13.Button6Click(Sender: TObject);
begin
        Canvas.Pen.Color := clBlack;
        Canvas.Brush.Color := clFuchsia;
        // прямоугольник с закругленными углами
        Canvas.RoundRect(100, 100, 180, 250, 10, 10);
end;

procedure TForm13.Button7Click(Sender: TObject);
begin
        Canvas.Pen.Width := 2; // ширина пера
        Canvas.Pen.Color := clBlue;
        Canvas.MoveTo(450,200); // перемещение пера без рисования
        // рисование прямой линии из текущей в указанную точку
        Canvas.LineTo(450,20);
        Canvas.LineTo(200,20);
        Canvas.LineTo(450,200);
end;

procedure TForm13.Button8Click(Sender: TObject);
begin
        // рисование точки красного цвета
        Canvas.Pixels[20, 20] := clRed;
end;

procedure TForm13.Button9Click(Sender: TObject);
begin

        Canvas.Font.Color:=clBlue;
        Canvas.Font.Size := 16; // размер шрифта
        Canvas.Font.Name := 'Arial'; // имя шрифта
        Canvas.TextOut(250, 10, 'Графика в Delphi'); // вывод текста на канву

end;

end.


 

Пример 2     Компьютерный бред.

 

unit Unit13;

interface

uses
        Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
        Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
        TForm13 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
    private
        { Private declarations }
    public
        { Public declarations }
end;

var
    Form13: TForm13;
    i: Integer;

implementation

{$R *.dfm}

procedure TForm13.Button1Click(Sender: TObject);
begin

        Canvas.Brush.Color := clWhite; // цвет кисти
        Canvas.FillRect(Canvas.ClipRect); // очистка канвы

        Canvas.Pen.Color := RGB(255,200,150);
        Canvas.Brush.Color := RGB(255,200,150);

    for i := 0 to 100 do
    begin
        Canvas.Brush.Color := RGB(255,200,100);
        // эллипс
        Canvas.Ellipse(50 + 2*i, 50 - i, 300, 300);
    end;

end;

end.


 

Пример 3     Построение графиков математических функций.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

unit Unit13;

interface

uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
    TForm13 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
    private
        { Private declarations }
    public
        { Public declarations }
    end;

var
    Form13: TForm13;
        X,Y: real; // координаты функции
        PX,PY: Integer; // координаты пикселей

implementation

{$R *.dfm}

procedure TForm13.Button1Click(Sender: TObject);
begin
    for PX := 0 to ClientWidth do
    begin
        X := PX * 4 * Pi/ClientWidth;
        Y := 0.8 * sin(X);

        // trunc возвращает целую часть результата вычислений
        // вычисления переносят ось X вниз до
        // половины экрана и переворачивают ось Y

        PY := trunc(ClientHeight - (Y + 1) * ClientHeight/2);
        Canvas.Pixels [PX, PY] := clRed;
    end;
end;

procedure TForm13.Button2Click(Sender: TObject);
begin
    for PX := 0 to ClientWidth do
    begin
        X := PX * 8 * Pi/ClientWidth;
        Y := 0.4 * sin(X);
        PY := trunc(ClientHeight - (Y + 1) * ClientHeight/2);
        Canvas.Pixels [PX, PY] := clBlue;
    end;
end;

procedure TForm13.Button3Click(Sender: TObject);
begin
    for PX := 0 to ClientWidth do
    begin
        X := PX * 16 * Pi/ClientWidth;
        Y := 0.2 * sin(X);
        PY := trunc(ClientHeight - (Y + 1) * ClientHeight/2);
        Canvas.Pixels [PX, PY] := clBlue;
    end;
end;

procedure TForm13.Button4Click(Sender: TObject);
begin
    Canvas.Brush.Color := clWhite; // цвет кисти
    Canvas.FillRect(Canvas.ClipRect); // очистка канвы

    Canvas.Pen.Color := clMenu;
    Canvas.MoveTo(0, 194);
    Canvas.LineTo(1100, 194);
    end;

end.


 

Пример 4     На скриншоте к предыдущему приложению заметно что линия графика прерывистая. Исправить этот недостаток можно если точки заменить на линии. Теперь можно смело раскрашивать замкнутые области, так как краска не будет разливаться.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

unit Unit13;

interface

uses
        Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
        Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
    TForm13 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);


    private
        { Private declarations }
    public
        { Public declarations }
    end;

var
        Form13: TForm13;
        X,Y: real; // координаты функции
        PX,PY: Integer; // координаты пикселей

    implementation

    {$R *.dfm}

procedure TForm13.Button1Click(Sender: TObject);
begin
        for PX := 0 to ClientWidth do
        begin
            X := PX * 4 * Pi/ClientWidth;
            Y := 0.8 * sin(X);
            PY := trunc(ClientHeight - (Y + 1) * ClientHeight/2);
            Canvas.Pen.Color := clRed;
            Canvas.LineTo (PX, PY);
        end;
end;

procedure TForm13.Button2Click(Sender: TObject);
begin
        for PX := 0 to ClientWidth do
        begin
            X := PX * 8 * Pi/ClientWidth;
            Y := 0.4 * sin(X);
            PY := trunc(ClientHeight - (Y + 1) * ClientHeight/2);
            Canvas.Pen.Color := clBlue;
            Canvas.LineTo (PX, PY);
        end;
end;

procedure TForm13.Button3Click(Sender: TObject);
begin
        for PX := 0 to ClientWidth do
        begin
            X := PX * 16 * Pi/ClientWidth;
            Y := 0.2 * sin(X);
            PY := trunc(ClientHeight - (Y + 1) * ClientHeight/2);
            Canvas.Pen.Color := clGreen;
            Canvas.LineTo (PX, PY);
        end;
end;

procedure TForm13.Button4Click(Sender: TObject);
begin
        Canvas.Brush.Color := clWhite; // цвет кисти
        Canvas.FillRect(Canvas.ClipRect); // очистка канвы

        Canvas.Pen.Color := clMenu;
        Canvas.MoveTo(0, 194);
        Canvas.LineTo(1100, 194);
end;

end.


 

Пример 5     Построение параболы и гиперболы.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure TForm13.Button5Click(Sender: TObject);
begin
        for PX := 1 to ClientWidth do
        begin
            X := PX * 4 * Pi/ClientWidth;
            Y := 1 / X * 2;        // гипербола
            PY := trunc(ClientHeight - (Y + 1) * ClientHeight/8);
            Canvas.Pen.Color := clBlue;
            Canvas.LineTo (PX, PY);
        end;
end;


Flag Counter
Яндекс.Метрика
200stran.ru: показано число посетителей за сегодня, онлайн, из каждой страны и за всё время
Besucherzahler russain brides
счетчик посещений

Выбери лучшее!

allbest