Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Топ:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Интересное:
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Дисциплины:
2020-06-02 | 121 |
5.00
из
|
Заказать работу |
|
|
Система координат при работе с графикой имеет начало (точку (0,0)) в левом верхнем углу экрана. Ось x направлена вправо, ось y – вниз. Очевидно, что все точки экрана имеют целочисленные координаты.
При построении простейших элементов изображений используются следующие процедуры и функции:
Название | Назначение |
PutPixel(x,y: integer; c: word); | Поставить точку (x,y), используя цвет c. Значение цвета обычно меняется от 0 до 15, вместо номера цвета можно употреблять цветовые константы модуля Graph. |
SetColor(c: word); | Установить текущий цвет для рисования отрезков, окружностей и т. п. Все линии после употребления этого оператора будут рисоваться установленным цветом. |
SetBkColor(c: word); | Установить текущий цвет для фона (то есть цвет всего экрана). |
GetMaxX; GetMaxY; | Эти функции возвращают максимальные допустимые значения координат x и y, соответственно. |
Line(x1,y1,x2,y2: integer); | Рисовать отрезок из (x1,y1) в (x2,y2) текущим цветом. |
Rectangle(x1,y1,x2,y2: integer); | Рисует текущим цветом прямоугольник, левый угол которого – (x1,y1), а правый нижний – (x2,y2). |
Circle(x,y: integer; r: word); | Рисует текущим цветом окружность с центром в точке (x,y) радиуса r. |
Arc (x,y: integer; a1,a2,r: word); | Рисует дугу окружности. a1 и a2 – начальный и конечный углы (в градусах), соответственно. Угол отсчитывается традиционно, против часовой стрелки, угол величиной 0° соответствует лучу y=0, x>0. |
Ellipse(x,y: integer; a1,a2,xr,yr: word); | Рисует дугу эллипса с полуосями xr и yr от угла a1 до a2. |
DrawPoly(n: word; P); | Рисует многоугольник, количество сторон в котором – n, а информация о вершинах хранится в нетипизированном параметре P. В качестве P удобнее всего использовать массив из записей, каждая из которых содержит поля x,y: integer; |
MoveTo(x,y: integer); | Эта процедура опирается на понятие текущей позиции. Она «запоминает» позицию (x,y) на экране, а в дальнейшем из этой позиции можно рисовать отрезки. |
LineTo(x,y: integer); | Рисует отрезок из текущей позиции в точку (x,y). При этом текущая позиция перемещается в конец нарисованного отрезка. |
MoveRel(dx,dy: integer); | Перемещает текущий указатель из прежнего положения (x,y) в точку (x+dx,y+dy). |
LineRel(dx,dy: integer); | То же, что и предыдущая процедура, но при перемещении рисует отрезок от (x,y) до (x+dx,y+dy). |
GetX; GetY; | Возвращают координаты текущего указателя (по отдельности). |
ClearDevice; | Очищает экран. |
Все приведённые выше процедуры для рисования выполняют только контурные рисунки (не закрашивая прямоугольник, окружность или эллипс внутри). По умолчанию рисование происходит с использованием тонкой сплошной линии, однако толщину и вид линии можно менять с помощью процедуры SetLineStyle(style,pattern,width: word). Рассмотрим назначение параметров этой процедуры.
|
1. style – вид линии. Здесь удобно задавать не конкретные числа, а константы: SolidLn, DottedLn, CenterLn, DashedLn, UserBitLn. Первая обозначает сплошную линию, следующие три – разные виды прерывистых линий, последняя – линию, вид которой определяется пользователем (см. ниже).
2. pattern – образец для вида линии, определяемого пользователем. Этот параметр вступает в действие лишь тогда, когда в предыдущем указано UserBitLn. Образец – это фрагмент линии, заданный в виде числа. Переход от конкретного фрагмента к числу выполняется, например, так:
Удобнее всего переводить полученное число в шестнадцатеричный вид, в нашем примере получится $999C. При изображении линии закодированный нами фрагмент будет повторяться столько раз, сколько нужно.
3. width – толщина линии. Можно использовать числа, однако определены 2 константы: NormWidth и ThickWidth (нормальная и толстая линии).
Перейдём теперь к рисованию закрашенных фигур. По умолчанию внутренняя область фигуры будет закрашиваться белым цветом, причём закраска будет сплошной. Для управления цветом и видом закраски используется процедура SetFillStyle(style, color: word); Также как и для стиля линии, для style предусмотрены константы: EmptyFill, SolidFill, LineFill, LtSlashFill, SlashFill, BkSlashFill, LtBkSlashFill, HatchFill, XHatchFill, InterleaveFill, WideDotFill, CloseDotFill, UserFill. Первая обозначает отсутствие закраски, вторая – сплошную, последующие – различные специфические виды закраски, самая последняя – закраску, задаваемую пользователем. Чтобы задать пользовательский образец закраски, нужно использовать процедуру SetFillPattern(Pattern: FillPatternType; Color: Word); FillPatternType определяется как array [1..8] of byte, каждый элемент массива кодирует одну строчку образца закраски (как и для линий), а всего таких строчек 8. В результате закраска выполняется с помощью одинаковых квадратиков 8 x 8.
|
Ниже приводятся процедуры рисования закрашенных фигур.
Название | Назначение |
Bar(x1,y1,x2,y2: integer); | Рисует закрашенный прямоугольник. |
FillEllipse(x,y: integer; xr,yr: word); | Закрашенный эллипс. используя X, Y как центр uXR, YR как горизонтальный и вертикальный радиусы |
FillPoly(n: word; P); | Закрашенный многоугольник. содержащий N вершин с координатами в P. |
PieSlice(x,y: integer; a1,a2,r: word); | Закрашенный круговой сектор. радиусом R с центром в X.Y от начального угла A1 к конечному углу EndA2. |
Sector (x,y: integer; a1,a2,xr,yr: word); | Закрашивает эллиптический сектор. радиусами XR, YR с центром в X, Y от начального угла StAngle к конечному углу EndAngle. |
FloodFill(x,y: integer; Cborder: word); | Выливает краску в точку (x,y), откуда она растекается во все стороны, пока не достигнет границы цвета Cborder. Если такой границы нет или она незамкнута, то краска может залить весь экран. |
Пример программы на слайде
Вывод текстовой информации.
Для вывода текста на экран используются две процедуры:
1. OutText(s: string). Эта процедура выводит строку s начиная с текущей позиции, то есть левый верхний угол выводимой строки находится в текущей позиции (по умолчанию это так). Текущая позиция задаётся, например, с помощью MoveTo.
2. OutTextXY(x,y: integer; s: string). Используется для вывода строки в конкретной позиции.
Если требуется вывести какие либо числа, то предварительно требуется преобразовать их в строку, например, с помощью процедуры Str. (Общий вид Str(Chislo, Stroka)
Процедура Str преобразовывает числовое значение переменной Chislo в строковую переменную Stroka.)
Пример:
var r: integer;
s: string;
...............
Str(r,s);
OutTextXY(100,200,’Результат=’+s);
Турбо Паскаль позволяет использовать несколько различных шрифтов для вывода текста. Кроме того, можно менять направление вывода текста, а также размер символов. В этих целях используется процедура SetTextStyle(Font, Direction, CharSize: word). Перечислим возможные константы и значения для параметров этой процедуры.
|
Font (шрифт):
DefaultFont – шрифт 8x8 (по умолчанию)
TriplexFont – полужирный шрифт
SmallFont – тонкий шрифт
SansSerifFont – шрифт без засечек
GothicFont – готический шрифт.
Direction (ориентация и направление вывода символов):
0 – привычный вывод слева направо
1 – снизу вверх (надпись «положена на бок»)
2 – слева направо, но «лежачими» буквами.
Size – размер шрифта (целые числа от 0 до 10).
Другая возможность при работе с текстом – это выравнивание его относительно задаваемых координат вывода. Для этого используется процедура SetTextJustify(horiz,wert: word). Horiz указывет как текст расположен относительно заданной позиции по горизонтали, а vert – по вертикали. Возможные константы:
для horiz:
LeftText – указанная позиция является левым краем строки
CenterText – позиция является серединой выводимой строки
RightText – правым краем строки;
для vert:
BottomText – позиция находится на нижнем крае изображения
CenterText – по центру
TopText – позиция является верхним краем изображения.
Пример. Открытие и запись в файл структуры типа «запись»:
program data; {Пример открытия типизированного файла}
uses crt;
type tabl = record
name,author:string[30];
year:integer
end;
var k: char; inf: tabl; f: file of tabl;
procedure opn;
Begin
assign(f,'baza.bkz'); reset(f); {попытка открыть существующий файл}
if ioresult<>0 then rewrite(f) {если файла не существует, - создание нового пустого файла}
End;
procedure news;
Begin
write('Введите название: '); readln(inf.name);
write('Введите автора: '); readln(inf.author);
write('Введите год: '); readln(inf.year);
write(f,inf);
end;
procedure poisk;
var i,a:integer;
Begin
clrscr; write('Введите год: ');
i:=0; readln(a); seek(f,0); {перемещаем файловый указатель на начало файла}
repeat
read(f,inf); inc(i);
if inf.year<a then
begin
writeln; writeln('Запись №',i);
write('Название: '); writeln(inf.name);
write('Автор: '); writeln(inf.author);
write('Год: '); writeln(inf.year);
readkey
end
until eof(f);
End;
{$I-}
Begin
opn;
news;
poisk
End.
{$I+}
Лекция 12. Текстовые файлы
Ниже будут обсуждаться способы взаимодействия программы на Паскале с текстовыми файлами, записанными на каком-либо диске. Примерами текстовых файлов могут служить тексты программ на Паскале, простые текстовые документы и т.п.
|
Любой текст в файле хранится в виде последовательности символов (char), для разбиения текста на строки используются невидимые при просмотре символы конца строки.
|
|
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!