Главная / Информатика / Учебное пособие «Графические возможности Delphi» 10-11 класс фрагмент пособия

Учебное пособие «Графические возможности Delphi» 10-11 класс фрагмент пособия

Название документа Автор.docx

  • ФИО полностью, Васяткина Татьяна Евгеньевна

  • Ваше фото (по желанию),

  • должность, учитель информатики

  • квалификациионная категория, первая

  • место работы (образовательное учреждение), МОУ СОШ № 19

  • Республика/край, город/поселение, г.Белово Кемеровской обл.

  • контактный для пользователей e-mail, kakovita @ mail.ru

  • адрес сайта личного или сайта ОУ (если есть), http://www.school19.edu.ru/


Название документа Графические фозможности Delphi.docx

hello_html_23ecde3b.gifhello_html_m5e9365f.gifhello_html_m52b7bdb8.gifТема урока: Графические возможности Delphi

Предмет: Информатика и ИКТ

Класс: 10-11

Использованные источники и литература:

Александровский А.Pascal и Delphi // BYTE/Россия. 2000. №3, Водовозов В.М. Информационная подготовка в среде визуальных объектов // Информатика и образование. 2000. № 4.С.87-90, Пупынин Д.Г., Селиванов В.Л. Основы программирования в среде Delphi: Учеб.пособие.-Новосибирск: изд.НГПУ, 2004.-297с.

Ключевые слова: информатика, программирование, Delphi, графика, учебное пособие




Графические возможности Delphi


Устройство объектов

Программирование в среде Delphi происходит с использованием объектов. На первых практических занятиях вы уже столкнулись с тем, что написание программы начинается с размещения на форме различных объектов, а уже потом пишется реакция на различные действия пользователя. Кроме этого, в процессе работы программы часто необходимо изменять различные свойства объектов (например надпись на метке или кнопке, цвет, размер объекта). Давайте разберемся, где хранятся все эти свойства и как их изменять.

В среде Delphi каждый объект содержит различные свойства. Эти свойства определяют надпись на объект е (Caption), его цвет (Color), размеры (Height, Width). Свойства объекта хранятся внутри самого объект а. Рассмотрим, что из себя представляет объект в Delphi. Во-первых, объект — это переменная. Однако, в отличие от рассмотренных ранее переменных, которые могли xранить в себе одно единственное значение, объекты имеют более сложную структуру. Исключительно в целях наглядности объект можно представить как «большую» переменную, содержащую в себе другие переменные (как большие, так и обычные). hello_html_m13522629.png

На рис. 3.1 изображено строение кнопки btHello.


Раз строение объекта отличается от обычной переменной, значит, и изменение значений объекта должно происходить немного иначе. На самом деле значение самого объекта изменяют очень редко Намного чаще изменяют свойства объекта. Но как же нам добраться до этих свойств, раз они находятся внутри объекта? Очень просто: обратиться к свойству объекта можно с помощью оператора «точка». Проиллюстрируем это с помощью рисунка:

hello_html_m13a5a4d0.png


Если проект состоит только из одной формы, то имя этой формы можно не писать. Delphi будет подразумевать, что все объекты, к которым мы обращаемся, находятся на нашей единственной форме.

!!! Строго говоря, имя формы можно не писать, даже если в проекте несколько форм, однако в таких случаях обычно происходит обращение из одних форм к объектам других, а в таких случаях имя формы обязательно. Поэтому, чтобы избежать различных недоразумений (где писать имя формы, а где нет), в проектах с несколькими формами лучше всегда указывать их имена.



Способы рисования

Отображение графической информации, а проще говоря, рисование, -очень важный элемент при создании программы. Часто необходимо нарисовать какую-либо картинку, отобразить график функции, да мало ли еще что. Каким же образом сделать это в программе на Delphi? Первым делом нужно отметить, что рисование происходит на форме (можно рисовать и на других объектах, но нам будет вполне достаточно только формы). Однако на самой форме (т.е. объекте fMain) ничего нарисовать нельзя, но у нее существует свойство Canvas, предназначенное как раз для этой цели. Свойство Canvas - это холст (кстати, слово так и переводится), как тот, на котором художник рисует картину, только в нашем случае рисует не художник, а наша программа, и все, что мы рисуем на холсте, тут же отображается на форме. Все объекты, к которым мы привыкли (кнопки, выключатели, переключатели), отображаются на форме точно такими же способами, какие мы сейчас рассмотрим. Существует три основные фигуры, с помощью которых происходит рисование: линия, прямоугольник, эллипс.

Необходимо отметить особенности системы координат в программировании:

Система координат в программировании определена следующим образом: начало координат в верхнем левом углу серой облает и формы, ось Ох направлена вправо, ось Оу- вниз. Масштаб измеряется в т очках экрана. Для рисования на форме предназначено свойство Canvas (холст формы). Почему начало координат находится не в самом углу формы? Потому что на заголовке рисовать ничего нельзя. Начало координат находится в верхнем левом углу той области, рисовать на которой можно.hello_html_mf3b349c.png




Методы объектов

Мы уже знаем, что у объектов есть различные свойства. Но свойства -это всего лишь переменные, хранящие характеристики объекта (например цвет, размер). Большинство из них определяют внешний вид объекта.

Рассмотрим для наглядности какой-нибудь объект из повседневной жизни, например стул. У каждого объекта есть свойства. Они есть и у нашего стула:

  1. Материал (дерево, железо, пластик).

  2. Цвет.

  3. Размер.

С другой стороны, к стулу можно применить еще один список:

  1. Подвинуть.

  2. Кинуть.

  3. Сломать.

  4. Отремонтировать.

Заметим, что элементы последнего списка не являются свойствами. Например, «сломать» — это не характеристика объекта, это действие, которое над ним можно совершить. Таким образом, у объектов, кроме свойств, есть еще и действия. Тем не менее, у разных объектов действия могут быть различны (например, стул нельзя включить или выключить, однако это можно проделать с телевизором). Действия, которые можно совершать над объектом, называются методами этого объекта.

Мет од - это некоторое действие, которое можно совершить с объектом. У разных объектов могут быть разные мет оды. Рассмотрим, как записываются методы объектов:

hello_html_m2695b9ea.png

Мет оды записываются так ж е, как и свойства (через т очку), но очень часто после имени метода записываются скобки с одним или несколькими параметрами. Кроме этого, методам, в отличие от свойств, ничего присваивать нельзя!



Инструменты рисования

Итак, мы хотим рисовать. Мы знаем, что рисовать нужно на холсте (Canvas). Но чем рисовать?

В Delphi существует два объекта, с помощью которых происходит рисование:

  1. Реn (перо).

  2. Brush (кисть).

Пером рисуются линии, а кистью закрашивается внутренность полых фигур (прямоугольников и эллипсов).


Рисование линии

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

  1. Поставить перо в начальную точку.

  2. Провеет и линию до конечной точки.

После рисования линии перо остается в конечной точке. Итак, рисование линии осуществляется с помощью двух методов. Поскольку методы всегда принадлежат каким-либо объектам, то перед названием метода будем записывать название того объекта, которому он принадлежит.


Canvas.MoveTo(x, у) - данный метод устанавливает перо в т очку с координатами (х, у), не рисуя при этом никаких линий.

Canvas.LineTo(x, у) - данный метод рисует линию из точки, в которой сейчас находится перо, в новую т очку с координатами (х, у). Вместо х и у в скобках могут быть как обычные числа, так и переменные целых типов.

Пример:


begin

fMain.Canvas.MoveTo (10, 20); //ставим перо в / начало линии

fMain.Canvas.LineTo (50, 80); //рисуем линию (см. рис. 3.2)

end;



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

Нарисовать прямоугольник можно, конечно, и по линиям, но удобнее для этого использовать специальный метод.


Canvas.Rectangle(xl, yl, х2, у2) - рисует прямоугольник по двум диагональным точкам. Координаты первой т очки (xl, yl), координаты второй (х2, у2). Порядок указания точек не имеет значения.

Пример:

begin

fMain.Canvas.Rectangle (100, 5, 60, 70); // см. рис. 3.2

end;


Обратите внимание, что если для метода используется несколько параметров, то все они разделяются символом «запятая». Никаких других разделителей при вызове метода внутри скобок не используется!



Рисование эллипса (овала)

Рисование эллипса происходит с помощью специального метода объекта Canvas под названием Ellipse.


Canvas.Ellipse(xl,yl, х2, у2) -рисует эллипс (овал). В качестве параметров в этот метод передаются координаты диагональных точек прямоугольника, в который эллипс будет вписан. Естественно, сам прямоугольник на экране не отображается.



Перо, кисть и их свойства

Как мы уже говорили, в Delphi существует два инструмента для рисования на холсте (Canvas):

это перо (Реп) и кисть (Brush).

Эти инструменты на самом деле являются свойствами объекта Canvas.


Canvas.Реn — перо.

Пером рисуются линии, а также внешний контур прямоугольников и эллипсов.


Canvas.Brush - кисть.

Кистью закрашивается внутренняя область прямоугольников и эллипсов.


В жизни мы можем выбирать для рисования перья разной толщины, кисти разной фактуры, макать их в краски различных цветов. Как с этим дела обстоят в программировании?

На самом деле все просто. Хотя Реn и Brush являются свойствами объекта Canvas, они, в свою очередь, сами являются объектами и имеют свои собственные свойства (как свойство Font на рис. 3.1), которые и определяют, какой толщины в данный момент перо, какого цвета кисть и т.д.


Свойства пера

Pen.Color — определяет цвет пера. Может принимать следующие значения:

clBlack - черный clWhite - белый

clAqua — голубой clBlue — синий

clFuchsia - розовый clGray - темно-серый

clGreen - зеленый clLime - салатный

clMaroon — малиновый clNavy— темно-синий

clOlive - оливковый clPurple - сиреневый

clRed - красный clSilver - светло-серый

clTeal — бирюзовый clYellow— желтый


Pen.Style - стиль линии. Принимает следующие значения:

psSolid - сплошная линия

psDash - штриховая линия

psDot - пункт ирная линия

psDashDot -штрих-пункт ирная линия

psDashDotDot - «тире - две т очки»

psClear -отсутствие линии


Pen.Width - толщина линии. Имеет тип Integer. Толщина применяется только для сплошной линии.


Свойства кисти

Brush.Color - определяет цвет , которым заполняется внутренняя область фигуры. Значения цветов такие ж е, как у объект а Реn.

Brush.Style - это свойство определяет стиль заполнения фигур. Может принимать следующие значения:


hello_html_m50bc64e1.png


Задача1:

Написать программу, рисующую прямоугольник (внешний контур прямоугольника - зеленого цвет а, внутреннее заполнение - красного). См. рис. 3.3.I

Здесь важно понимать, что не нужно сразу рисовать прямоугольник. Сначала необходимо настроить перо и кисть.

Мы должны поступать так, как поступает художник. Сначала он выбирает, какое ему нужно перо (толстое или тонкое), кисть (круглая, плоская и т.д.). Потом он макает свои инструменты в краски нужных цветов и только после этого начинает рисовать.


fMain.Canvas.Pen.Color := clGreen;

fMain.Canvas.Pen.Style := psSolid;

fMain.Canvas.Brush.Color := clRed;

fMain.Canvas.Brush.Style := bsFDiagonal;

fMain.Canvas.Rectangle (30,10,70,50);

Задача 2:

hello_html_m7ba45fb3.png

Написать программу, рисующую указанную фигуру. Контур прямоугольника — желтый, заполнение — синее. Контур эллипса - красный, заполнение - зеленое. Ширина эллипса равна половине ширины прямоугольника (рис. 3.4).

В данном случае мы рисуем уже две фигуры и поэтому должны настраивать инструменты перед каждым рисованием.


fMain.Canvas.Pen.Color := clYellow;

fMain.Canvas.Pen.Style :=psSolid;

fMain.Canvas.Brush.Color := clBlue;

fMain.Canvas.Brush.Style := bsBDiagonal;

fMain.Canvas.Rectangle(30,10,70,50);

fMain.Canvas.Pen.Color :=clRed;

fMain.Canvas.Pen.Style :=psSolid;

fMain.Canvas.Brush.Color := clGreen;

fMain.Canvas.Brush.Style := bsHorizontal;

fMain.Canvas.Ellipse(50,10,70,50);


Заполнение многоугольников и сложных фигур

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

Фигуру любой формы можно заполнить внутри с помощью метода FloodFill.


Canvas.FloodFill(x, у, Color, FillStyle);


Каким же образом работает данный метод?

Попытаемся заполнить цветом внутренность треугольника. Треугольник - нестандартная фигура, поэтому единственный способ его нарисовать — линиями.

Заполнение с помощью FloodFill происходит следующим образом. Для начала отвлечемся от программирования. Представьте себе, что у вас есть лист бумаги и кружка с краской. Вы выбираете на листе какую-то точку и начинаете медленно вливать краску из кружки в эту точку. При этом краска, естественно, будет растекаться по листу бумаги в разные стороны. Точно также работает и FloodFill. Параметры х и у как раз и являются координатами точки, в которую вливается краска, однако параметр Color — это не цвет, которым заполняется фигура, его назначение зависит от параметра FillStyle. Метод FloodFill умеет заполнять фигуры двумя способами.

Способ заполнения фигуры зависит от параметрa FillStyle, который может принимать следующие два значения:

fsBorder - при заполнении фигуры краска растекается из т очки с координатами (х, у) в разные стороны, пока не встретит на пут и цвет, заданный параметром Color.

Таким образом, при данном способе краска не вытекает за пределы некоторого контура (линии определенного цвета). Однако будьте внимательны: контур обязательно должен быть замкнутым. Если в нем окажется хоть одна маленькая дырочка, то краска вытечет через нее и зальет всю форму!

fsSurtace- при использовании этого стиля заполнение фигуры также начинается с точки (х, у). Краска растекается в разные стороны, заменяя цвет , заданный параметром Color, на новый цвет . Наверное, вы уже заметили что в методе FloodFill нигде не указывается, каким цветом и стилем будет заполняться сама фигура. Это действительно так.

Заполнение фигуры происходит кистью, то есть цветом и стилем, значения, которых в данный момент содержатся в объект е Brush.







Задача 3:hello_html_m5a3bb3d8.png

Нарисовать треугольник (контур -синий, заполнение- зеленое), как указано на рис. 3.5. Обратим внимание на следующие моменты:

  1. Нет необходимости присваивать psSolid стилю пера, т.к. при начале работы программы (по умолчанию) оно устанавливается именно в это значение.

  2. Для рисования линий кисть нам не нужна, поэтому мы присваиваем ей значения непосредственно перед методом FloodFill.

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


fMain.Canvas.Pen.Color := clBlue;

fMain.Canvas.MoveTo (50, 10);

fMain.Canvas.LineTo (70,70);

fMain.Canvas.LineTo (30, 70);

fMain.Canvas.LineTo (50, 10);

fMain.Canvas.Brush.Color := clGreen;

fMain.Canvas.Brush.Style :=bsVertical;

fMain.Canvas.FloodFill( 50, 30, clBlue, fsBorder),



Использование различных цветов при рисовании

Ранее мы узнали, что в Delphi определено несколько цветов, которым даны названия. Однако при рисовании мы не ограничены только этими цветами. Программист на Delphi может использовать в своей программе более 16 миллионов цветов и оттенков. Каким образом мы можем выбрать какой-нибудь из них? Для этого разберемся, каким образом получаются различные цвета. Сейчас у каждого дома есть цветной телевизор.

Экран телевизора состоит из светящихся точек, расположенных группами по три (красная, зеленая, синяя). Когда горят только красные точки, мы видим красный цвет, когда зеленые- зеленый цвет, когда синие - синий цвет. Интереснее, когда горят сразу несколько точек. Поскольку мы смотрим на телевизор издалека, то не видим отдельных точек, а видим смесь из цветов. Например, красный, смешиваясь с зеленым, даст желтый цвет, красный с синим — розовый и так далее.

Кроме того что точки могут светиться в разных сочетаниях (это дает немного цветов), они еще могут светиться с разной яркостью, что дает огромное количество оттенков. Таким образом, смешивая три основных цвета (красный, зеленый и синий) различной интенсивности и в различных сочетаниях, можно получить огромное количество цветов. Точно таким образом сделано и в Delphi. Для получения любого из более чем 16 миллионов цветов предназначена функция RGB.

Любой цвет в программе можно получить из трех основных цветов (красного, зеленого, синего) с помощью определенной в Delphi функции RGB. Эта функция имеет три параметра. Яркость каждой составляющей определяется числом от 0 (не горит ) до 255 (горит в полную силу).


RGB(<яркость красного>, <яркость зеленого>,<яркость синего>);


Пример:

fMain.Color := RGB (237, 153, 27); // оранжевый

f Main.Label1.Color := RGB(128, 0, 120); // то же, что и clPurple (сиреневый)


Так как RGB является функцией, то результат ее работы должен быть обязательно чему-нибудь присвоен. Более подробно о том, что такое функция, мы поговорим немного позже.



Практика

Операции рисованияhello_html_35475d83.png

Давайте попробуем реализовать на практике рассмотренные нами способы рисования. Запустите среду разработки Delphi. Задайте для главной формы приложения заголовок «Рисунок» и имя fPicture.


Как вы уже знаете, приложение может выполнять какие-либо действия только в ответ на некоторое событие. Значит, и рисунок на форме Рис. 3.6 будет изображаться только при наступлении некоторого события, и, следовательно, операции рисования должны быть заданы в процедуре обработки этого события. На данный момент вы знакомы пока только с одним событием - щелчком мышью по кнопке. Им и воспользуемся.

Задача 4:

Разместите на уже созданной форме кнопку, задайте для нее надпись «Домик» и имя btHouse. При нажатии на эту кнопку нарисуйте домик (рис. 3.6), не отрывая пера от холста и не проводя по одной линии дважды. Боковая сторона домика 50 точек.

Закончив ввод текста, запустите приложение и убедитесь, что при нажатии кнопки на форме появляется рисунок.


Задача 5:

  1. Сделайте так, чтобы две линии, составляющие крышу домика, рисовались зеленым цветом.

  2. Добавьте еще одну кнопку и сделайте с помощью нее отображение на форме любого другого рисунка

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



Проект «Выбор цвета»hello_html_6ad84e96.png

Мы думаем, вам уже не терпится посмотреть, какие же цвета позволяет использовать язык Delphi в программе. Для того, чтобы удовлетворить ваше любопытство, давайте создадим специальный проект, в котором на практике проверим работу функции RGB.


Для начала нам потребуются два объекта: кнопка (ведь программа должна реагировать на действия пользователя) и еще один, где будет отображаться выбранный нами цвет (рис. 3.8). В качестве дисплея воспользуемся объектом Panel (назовем его plDisplay). Мы с вами уже меняли цвет формы с помощью ее свойства Color. У панели тоже есть такое свойство, а значит, мы можем присвоить туда цвет, созданный функцией RGB. Записать эту команду нужно, конечно же, в событии OnClick нашей кнопки (дайте ей имя btShow). Поскольку программирование в среде Delphi основано на событиях, мы будем в книге выделять жирными линиями названия объекта и его события, куда должен быть помещен данный кусок программы, вместо того чтобы записывать всю заготовку события целиком.


btShow OnClick

plDisplay.Color:= RGB(237, 153, 27); // оранжевый цвет


Меняя значения яркости базовых цветов, вы можете увидеть, как от них зависит итоговый цвет.

Однако удобство пользования нашей программой оставляет желать лучшего, ведь для просмотра каждого цвета мы должны изменить текст программы и снова ее запустить. Давайте усовершенствуем ее! Пусть пользователь имеет возможность вводить яркости базовых цветов прямо на форме.


Поскольку базовых цветов три, то нам понадобится три поля ввода (назовем их edRed, edGreen, edBlue). Также на форме можно с помощью меток подписать поля ввода, чтобы не запутаться, где какой цвет нужно будет указывать (рис. 3.9). Кроме того, нужно описать три переменные, в Рис. 3.9 которых будут сохраняться введенные пользователем значения. hello_html_m4342b92.png

Дадим переменным имена в соответствии с хранимой информацией:


var

г,g,b: Byte;


Осталось только поместить содержимое полей ввода в соответствующие переменные и использовать их в функции RGB. Для этого исправим событие нашей кнопки следующим образом:


btShowOnClick

г := StrToInt(edRed.Text);

g := StrToInt (edGreen.Text) ;

b := StrToInt (edBlue.Text);

plDisplay.Color := RGB(r, g, b);


Теперь вы можете поделиться своей работой даже с человеком, у которого нет Delphi, т.к. для получения любого цвета уже нет необходимости изменять текст программы.


Однако выбор цвета все же не очень нагляден. Нет возможности плавно увеличивать или уменьшать яркость составляющих и сразу наблюдать изменение результата. Попробуем исправить и этот недостаток. Для начала давайте решим, какой элемент интерфейса позволит нам плавно менять значения. Вспомните, с помощью какого элемента вы можете прокручивать текст своей программы в среде Delphi? Это, конечно же, полоса прокрутки (ScrollBar)! Вы можете найти данный компонент в палитре Standart (hello_html_m5402cd3e.png)


Полоса прокрутки предназначена для плавного выбора значения из заданного диапазона. Приведем основные свойства данного компонента:


Полоса прокрутки (ScrollBar)hello_html_m5402cd3e.png

Min: Integer - определяет наименьшее значение, которое может принимать полоса прокрутки.

Max: Integer - определяет наибольшее значение, которое может принимать полоса прокрутки.

Position: Integer - текущее значение полосы прокрутки.

SmallChange: Word - определяет, на сколько изменится свойство Position при щелчке мышью на кнопках с треугольниками или при нажатии на клавиши со стрелками.

LargeChange: Word - определяет, на сколько изменится свойство Position при щелчке мышью между бегунком и кнопками с треугольниками или при нажатии на клавиши PageUp и PageDown.

Kind - ориентация компонента: sbHorizontal -горизонтальная; stAfrtical-вертикальная;


Для указания яркости трех цветов нам потребуется три таких компонента. Расположите их на форме (рис. 3.10) и назовите sbRed, sbGreen, sbBlue. Учитывая, что яркость базовых цветов изменяется от 0 до 255, необходимо установить свойства Min и Мах каждой полосы прокрутки в соответствующие значения.hello_html_4a4dd202.png


Вспомним, что наша главная задача сейчас — добиться плавного изменения цвета. Мы сможем этого сделать, только если цвет будет изменяться непосредственно в момент перемещения «бегунка» полосы прокрутки. Это очень просто, если воспользоваться специальным событием полосы прокрутки OnChange.


Событие OnChange объект a ScrollBar происходит каждый раз при перемещении «бегунка», нажатии на кнопках с треугольниками, а также в прост ранет во между кнопками и «бегунком». Другими словами, оно возникает при изменении у объекта свойства Position.


Откроем событие OnChange объекта sbRed и поместим в него вызов функции RGB. Яркость каждого базового цвета будет определяться положением бегунков наших полос прокруток, те их свойством Position.


sbRed OnChange

plDisplay.Color:=RGB(sbRed.Position, sbGreen.Position, sbBlue.Position);


Поскольку итоговый цвет должен меняться при перемещении «бегунка» любой полосы прокрутки, то данную команду нужно вписать в события OnChange и остальных полос прокруток.

Задача:

Доработать проект таким образом, чтобы при изменении полос прокруток их значения отображались в соответствующих объектах Edit, а изменения значений в полях ввода приводили к изменению полос прокруток.

Учебное пособие «Графические возможности Delphi» 10-11 класс фрагмент пособия
  • Информатика
Описание:

Операции рисования

Давайте попробуем реализовать на практике рассмотренные нами способы рисования. Запустите среду разработки Delphi. Задайте для главной формы приложения заголовок «Рисунок» и имя fPicture.

Как вы уже знаете, приложение может выполнять какие-либо действия только в ответ на некоторое событие. Значит, и рисунок на форме Рис. 3.6 будет изображаться только при наступлении некоторого события, и, следовательно, операции рисования должны быть заданы в процедуре обработки этого события. На данный момент вы знакомы пока только с одним событием - щелчком мышью по кнопке. Им и воспользуемся.

Задача 4:
Разместите на уже созданной форме кнопку, задайте для нее надпись «Домик» и имя btHouse. При нажатии на эту кнопку нарисуйте домик (рис. 3.6), не отрывая пера от холста и не проводя по одной линии дважды. Боковая сторона домика 50 точек.
Закончив ввод текста, запустите приложение и убедитесь, что при нажатии кнопки на форме появляется рисунок.

Задача 5:

  1. Сделайте так, чтобы две линии, составляющие крышу домика, рисовались зеленым цветом.
  2. Добавьте еще одну кнопку и сделайте с помощью нее отображение на форме любого другого рисунка
  3. Раскрасьте свой рисунок. Обратите внимание, что некоторые элементы рисунка могут быть заполнены фоном непосредственно при рисовании (прямоугольник, эллипс), а некоторые — позже с помощью метода FloodFill (замкнутые области неправильной формы).

 

Проект «Выбор цвета»

Мы думаем, вам уже не терпится посмотреть, какие же цвета позволяет использовать язык Delphi в программе. Для того, чтобы удовлетворить ваше любопытство, давайте создадим специальный проект, в котором на практике проверим работу функции RGB.

Для начала нам потребуются два объекта: кнопка (ведь программа должна реагировать на действия пользователя) и еще один, где будет отображаться выбранный нами цвет (рис. 3.8). В качестве дисплея воспользуемся объектом Panel (назовем его plDisplay). Мы с вами уже меняли цвет формы с помощью ее свойства Color. У панели тоже есть такое свойство, а значит, мы можем присвоить туда цвет, созданный функцией RGB. Записать эту команду нужно, конечно же, в событии OnClick нашей кнопки (дайте ей имя btShow). Поскольку программирование в среде Delphi основано на событиях, мы будем в книге выделять жирными линиями названия объекта и его события, куда должен быть помещен данный кусок программы, вместо того чтобы записывать всю заготовку события целиком.



btShow OnClick
plDisplay.Color:= RGB(237, 153, 27); //  оранжевый цвет

Меняя значения яркости базовых цветов, вы можете увидеть, как от них зависит итоговый цвет.
Однако удобство пользования нашей программой оставляет желать лучшего, ведь для просмотра каждого цвета мы должны изменить текст программы и снова ее запустить. Давайте усовершенствуем ее! Пусть пользователь имеет возможность вводить яркости базовых цветов прямо на форме.

Поскольку базовых цветов три, то нам понадобится три поля ввода (назовем их edRed, edGreen, edBlue). Также на форме можно с помощью меток подписать поля ввода, чтобы не запутаться, где какой цвет нужно будет указывать (рис. 3.9). Кроме того, нужно описать три переменные, в Рис. 3.9 которых будут сохраняться введенные пользователем значения.
Дадим переменным имена в соответствии с хранимой информацией:

var
г,g,b: Byte;

Осталось только поместить содержимое полей ввода в соответствующие переменные и использовать их в функции RGB. Для этого исправим событие нашей кнопки следующим образом:


btShowOnClick
г := StrToInt(edRed.Text);
g := StrToInt (edGreen.Text) ;
b := StrToInt (edBlue.Text);
plDisplay.Color := RGB(r, g, b);

Теперь вы можете поделиться своей работой даже с человеком, у которого нет Delphi, т.к. для получения любого цвета уже нет необходимости изменять текст программы.

Однако выбор цвета все же не очень нагляден. Нет возможности плавно увеличивать или уменьшать яркость составляющих и сразу наблюдать изменение результата. Попробуем исправить и этот недостаток. Для начала давайте решим, какой элемент интерфейса позволит нам плавно менять значения. Вспомните, с помощью какого элемента вы можете прокручивать текст своей программы в среде Delphi? Это, конечно же, полоса прокрутки (ScrollBar)! Вы можете найти данный компонент в палитре Standart ( )

Полоса прокрутки предназначена для плавного выбора значения из  заданного диапазона. Приведем основные свойства данного компонента:

Полоса прокрутки (ScrollBar )
Min: Integer  - определяет наименьшее значение, которое может принимать полоса прокрутки.
Max: Integer - определяет наибольшее значение, которое может принимать  полоса прокрутки.
Position: Integer    - текущее значение полосы прокрутки.
SmallChange: Word - определяет, на сколько изменится свойство Position при щелчке мышью на кнопках с треугольниками или при нажатии на клавиши со стрелками.
LargeChange: Word - определяет, на сколько изменится свойство Position при щелчке мышью между бегунком и кнопками с треугольниками или при нажатии на клавиши PageUp и PageDown.
Kind  - ориентация компонента: sbHorizontal -горизонтальная; stAfrtical-вертикальная;

Для указания яркости трех цветов нам потребуется три таких компонента. Расположите их на форме (рис. 3.10) и назовите sbRed, sbGreen, sbBlue. Учитывая, что яркость базовых цветов изменяется от 0 до 255, необходимо установить свойства Min и Мах каждой полосы прокрутки в соответствующие значения.

Вспомним, что наша главная задача сейчас — добиться плавного изменения цвета. Мы сможем этого сделать, только если цвет будет изменяться непосредственно в момент перемещения «бегунка» полосы прокрутки. Это очень просто, если воспользоваться специальным событием полосы прокрутки OnChange.

Событие OnChange объект a ScrollBar происходит каждый раз при перемещении «бегунка», нажатии на кнопках с треугольниками, а также в прост ранет во между кнопками и «бегунком». Другими словами, оно возникает при изменении у объекта свойства Position.

 Откроем событие OnChange объекта sbRed и поместим в него вызов функции RGB. Яркость каждого базового цвета будет определяться положением бегунков наших полос прокруток, те их свойством Position.


sbRed OnChange
plDisplay.Color:=RGB(sbRed.Position, sbGreen.Position, sbBlue.Position);

Поскольку итоговый цвет должен меняться при перемещении «бегунка» любой полосы прокрутки, то данную команду нужно вписать в события OnChange и остальных полос прокруток.
Задача:
Доработать проект таким образом, чтобы при изменении полос прокруток их значения отображались в соответствующих объектах Edit, а изменения значений в полях ввода приводили к изменению полос прокруток.



Автор Васяткина Татьяна Евгеньевна
Дата добавления 02.10.2011
Раздел Информатика
Подраздел
Просмотров 1359
Номер материала 1418
Скачать свидетельство о публикации

Оставьте свой комментарий:

Введите символы, которые изображены на картинке:

Получить новый код
* Обязательные для заполнения.


Комментарии:

↓ Показать еще коментарии ↓