Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Рисование в ограниченном прямоугольнике

Поиск

На практике бывает необходимо рисовать не на всей форме, а в ограниченном прямоугольнике. Для этого применяется компонент PaintBox, который находится в Палитре Компонентов на странице System (рис.9.15)

Компонент PaintBox генерирует событие OnPaint, в ответ на которое вы можете рисовать в его области все, что угодно. Например, давайте рассмотрим рисование “звездного неба”.

Шаг 1. Начинайте новый проект и сделайте новую форму окном диалога. Для этого установите свойство формы BorderStyle в значение dsDialog.

Шаг 2. Поместите в нижней части формы кнопку типа BitBtn и установите ему следующий обработчик события OnPaint:

procedure TForm1. PaintBox1Paint (Sender: TObject);

Var

I: Integer;

Begin

with PaintBox1 do

Begin

( Использовать темно-синюю кисть для фона)

Canvas. Brush. Color: = c1Navy;

(Заполнить фон)

Canvas. FillRect (Rect (0, 0, Width, Heiight));

(Нарисовать 200 точек в случайных местах)

for I: = to 200 do

Canvas. Pixels [ Random (Width), Random (Height)]: = cIWhite;

end;

end;

После компиляции и запуска проекта вы получите форму, изображенную на рисунке (см.каталог \Chap9\Drawing\Step5 на компакт-диске).

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

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

Так как при рисовании нам постоянно придется использовать конструкции вида

... Form1.Canvas......

то лучше эту часть вынести за скобки с помощью with:

... with Form1.Canvas dobegin... end;...

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

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

procedure TForm1.FormPaint(Sender: TObject); begin with Form1.Canvas dobegin //Задаем кисть желтого цвета 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);...

Вообще говоря, рисовать можно не только на форме.

 

 



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 202; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.66.224 (0.005 с.)