Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo-Pascal.7.0.doc
Скачиваний:
19
Добавлен:
08.11.2018
Размер:
3.66 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 сделайте надпись “Это снеговик”.

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