Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.doc
Скачиваний:
32
Добавлен:
12.03.2016
Размер:
3.29 Mб
Скачать
      1. Работа с цветом. Заливка. Стиль линий и заливки

Сначала поговорим о стиле линий. Если вы хотите, чтобы линии, которыми чертятся фигуры, были потолще, используйте процедуру SetLineStyle. Вот ее вызов -SetLineStyle(0, 0, ThickWidth). Это приказ отныне рисовать линии толстыми. Если вы хотите вернуться к тонким линиям, напишитеSetLineStyle(0, 0, NormWidth).

Первый параметр процедуры SetLineStyle управляет стилем прямых отрезков (штриховые, пунктирные и др.). Попробуйте вместо 0 написать 1, 2 или 3 и посмотрите, что получится.

Второго параметра касаться не будем.

А теперь поговорим о цвете. Если цвет точки задается непосредственно в вызове процедуры, которая рисует точку (PutPixel), то цвета многих других фигур задаются по-иному. Делает это специальная процедура SetColor. Пример:SetColor(Yellow)приказывает компьютеру отныне рисовать фигуры желтым цветом.

Вот поясняющий фрагмент:

Circle(100,100,20); {окружность белая и тонкая, так как по умолчанию

{Паскаль все рисует белым цветом тонкими линиями}

SetColor(Yellow);

Circle(150,100,20); {желтая тонкая окружность }

SetLineStyle(0, 0, ThickWidth);

Circle(200,100,20); {желтая толстая окружность}

SetColor(Blue);

SetLineStyle(0, 0, NormWidth);

Circle(250,100,20); {синяя тонкая окружность}

Работая в Паскале, вы можете покрасить любым цветом (залить краской) любую область экрана внутри замкнутого контура. Пусть вы нарисовали такую картинку:

После этого вы можете ее покрасить, например, вот так:

Как красить? Начнем с процедуры SetFillStyle. Подобно тому, как процедура SetColor сама ничего не рисует, а только устанавливает цвет линий на будущее, процедура SetFillStyle сама ничего не заливает, а устанавливает цвет и стиль заливки на будущее. Например,SetFillStyle(1, Green) устанавливает заливку зеленым цветом. На единичку пока не обращаем внимания.

Сам процесс заливки вызывает процедура FloodFill. Например,FloodFill(200, 150, Blue) вызывает следующие действия Паскаля:

В точке экрана с координатами х=200 иу=150встает “маляр с ведром краски”, цвет которой был указан в обращении к процедуре SetFillStyle (в нашем примере - зеленый), и начинает эту краску разливать вокруг себя. Краска свободно растекается по экрану и преградой для нее становится только линия, имеющая цвет, указанный в обращении к процедуре FloodFill, то есть синий. Очевидно, если синий контур не будет замкнут вокруг “маляра”, то краска прольется на весь экран.

Пример: Следующий фрагмент нарисует желтый квадрат и зальет его красным цветом:

SetColor(Yellow);

SetFillStyle(1, Red);

Rectangle(200,50,300,150);

FloodFill(250, 100, Yellow)

А теперь попробуем поставить “маляра” вне квадрата, записав в нашем фрагменте вместо FloodFill(250, 100, Yellow)например,FloodFill(250, 200, Yellow). Теперь красной будет вся поверхность экрана, кроме области внутри квадрата.

Распространенная ошибка новичков - на вопрос о том, каким цветом будет красить оператор FloodFill(250, 100, Yellow), они отвечают “Желтым”, хотя нужно отвечать “Не знаю, надо посмотреть вSetFillStyle”.

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

Для этого поместим “маляра” внутрь этого прямоугольника и используем операторы SetFillStyle(1, Yellow)иFloodFill(  ,   ,Blue ). Мы получим следующую картину:

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

Заливку можно делать не только сплошной, но и по-разному заштрихованной. Для этого вместо единички в обращении к процедуре SetFillStyle попробуйте другие целые числа - 2, 3 и др.

Задание 68:Усовершенствуйте снеговика из 5.3. Он должен стать таким - с красным носом, красными губами, желтой шапкой и толстым синим посохом. При помощи оператора WriteLn сделайте надпись “Это снеговик”.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]