BorlanD Russian Сommunity

Изучим основные приемы рисования. Рисование на форме (как, впрочем, и на многих других объектах) происходит через контекст устройства (холст). Этот объект появляется в виде подсказки после точки при наборе программы.

К этому объекту (Canvas) мы можем приписывать разные другие объекты, в частности кисть (TBrush), перо (TPen) и шрифт (TFont). Кроме того, на холсте (Canvas) мы можем использовать картинку (TBitmap). Эти объекты будут рассмотрены подробнее в следующих уроках.

Так как при рисовании нам постоянно придется использовать конструкции вида Form1.Canvas, то лучше эту часть вынести за скобки с помощью with.

 

Код:

 

            with Form1.Canvas do

            begin

            ...

            end;

 

Между begin и end мы как раз и будем рисовать. Куда поместить весь этот код, зависит от задачи. Можно написать его в обработчике нажатия какой-нибудь кнопки или еще где-нибудь, где вам надо. Мы же поместим его в обработчик FormPaint для нашей формы. Логично это сделать потому, что, в частности, это событие возникает и при создании формы. Кроме того, если окно нашей формы будет закрыто другим окном, а потом снова окажется видимым, то код FormPaint также будет выполняться, так что мы остановимся именно на этом обработчике.

 

Давайте для начала нарисуем кружок желтого цвета:

 

procedure TForm1.FormPaint(Sender: TObject);

begin

            with Form1.Canvas do

            begin

            //Задаем кисть желтого цвета

            Brush.Color:=RGB(255, 255, 0);

            //Рисуем круг

            Ellipse(10, 10, 30, 30);

            end;

end;

 

Аналогичным образом можно нарисовать прямоугольник (используем Square), напечатать некой текст (TextOut) или вывести еще какие-нибудь примитивы.

Для рисования линий используются методы LineTo и MoveTo. Первый из них рисует отрезок, второй - просто передвигает точку рисования.

 

Вот пример их использования:

 

             //Передвигаем перо в точку (10, 10)

            Form1.Canvas.MoveTo(10, 10);

            //Рисуем три линии

            Form1.Canvas.LineTo(30, 70);

            Form1.Canvas.LineTo(80, 40);

            Form1.Canvas.LineTo(10, 10);

 

Тот же результат можно получить и через метод Polygon.

 

Он в качестве параметра берет массив точек (вершин):

 

var

            points: Array [1..3] of TPoint;

           

            points[1].X:=10; points[1].Y:=10;

            points[2].X:=30; points[2].Y:=70;

            points[3].X:=80; points[3].Y:=40;

            Form1.Canvas.Polygon(points);

           

В приведенном примере треугольник не закрашивается. Для его закраски (а также любой фигуры) используется метод FloodFill. Он закрашивает область текущей кистью, начиная с точки, передаваемой в него в качестве параметра.

 

Код:

 

//Берем кисть красного цвета

            Form1.Canvas.Brush.Color:=RGB(255, 0, 0);

            //Закрашиваем

            Form1.Canvas.FloodFill(12, 12, RGB(0, 0, 0), fsBorder);

 

Если последний параметр равен fsBorder, то заполнение цветом идет до тех пор, пока наша волна закраски не упрется в границу, заданную вторым параметром. Если же он равен fsSurface, то закрашиваться будут именно точки с цветом, задаваемым вторым параметром (начиная от точки, определяемой первыми двумя параметрами).

 

Кроме линий, можно выводить и отдельные точки.

 

Вот пример:

            //Выводим точку красного цвета

            Form1.Canvas.Pixels[9, 9]:=RGB(255, 0, 0);

 

Вообще говоря, рисовать можно не только на форме. Но об этом как-нибудь в следующий раз.

Всё на этом урок закончен.

Просмотров: 13063 | Категория: Delphi 7 | Дата: 11.05.2008