|Название |Назначение | |PutPixel(x,y: integer; c: |Поставить точку (x,y), используя цвет c. | |word); |Значение цвета обычно меняется от 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: |Рисует дугу окружности. a1 и a2 ( начальный и| |word); |конечный углы (в градусах), соответственно. | | |Угол отсчитывается традиционно, против | | |часовой стрелки, угол величиной 0( | | |соответствует лучу y=0, x>0. | |Ellipse(x,y: integer; |Рисует дугу эллипса с полуосями xr и yr от | |a1,a2,xr,yr: word); |угла 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. Образец ( это фрагмент линии, заданный в виде числа.
Переход от конкретного фрагмента к числу выполняется, например, так:
[pic]
Удобнее всего переводить полученное число в шестнадцатеричный вид, в нашем примере получится $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. В результате закраска выполняется с помощью одинаковых квадратиков 8x8.
Ниже приводятся процедуры рисования закрашенных фигур.
|Название |Назначение | |Bar(x1,y1,x2,y2: integer); |Рисует закрашенный прямоугольник. | |FillEllipse(x,y: integer; xr,yr: |Закрашенный эллипс. | |word); | | |FillPoly(n: word; P); |Закрашенный многоугольник. | |PieSlice(x,y: integer; a1,a2,r: word);|Закрашенный круговой сектор. | |Sector (x,y: integer; a1,a2,xr,yr: |Закрашивает эллиптический сектор. | |word); | | |FloodFill(x,y: integer; Cborder: |Выливает краску в точку (x,y), откуда | |word); |она растекается во все стороны, пока | | |не достигнет границы цвета Cborder. | | |Если такой границы нет или она | | |незамкнута, то краска может залить | | |весь экран. |
3. Вывод текстовой информации.
Для вывода текста на экран используются две процедуры:
1. OutText(s: string). Эта процедура выводит строку s начиная с текущей позиции, то есть левый верхний угол выводимой строки находится в текущей позиции (по умолчанию это так). Текущая позиция задаётся, например, с помощью MoveTo.
2. OutTextXY(x,y: integer; s: string). Используется для вывода строки в конкретной позиции.
Если требуется вывести какие либо числа, то предварительно требуется преобразовать их в строку, например, с помощью процедуры Str.
Пример: 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 ( позиция является верхним краем изображения.
Лекция 12. Текстовые файлы
Ниже будут обсуждаться способы взаимодействия программы на Паскале с текстовыми файлами, записанными на каком-либо диске. Примерами текстовых файлов могут служить тексты программ на Паскале, простые текстовые документы и т.п.
Любой текст в файле хранится в виде последовательности символов (char), для разбиения текста на строки используются невидимые при просмотре символы конца строки.
1. Объявление файловой переменной и привязка к файлу на диске
Для того чтобы программа могла работать с текстовым файлом, нам потребуется переменная специального файлового типа text: var f: text;
Эта переменная не содержит в себе весь текст из файла, она служит для чтения данных из файла и для записи новых данных в него.
Прежде чем работать с конкретным файлом на диске, файловую переменную следует связать с этим файлом, используя такую процедуру: assign(TxtFile: text, name: string);
Первый параметр (TxtFile) — файловая переменная, второй — строка, содержащая имя файла на диске. Если файл лежит в текущем каталоге, то достаточно указать только его имя и расширение, если в каком-либо другом, то потребуется указывать путь к этому файлу, например: assign(f,'Z:SCHOOLtext1.txt');
2. Чтение данных из файла
Перед тем как рассматривать процедуры чтения, заметим что файл можно обходить только последовательно. Хорошей аналогией файла может послужить магнитная лента, с которой головка может читать информацию только по порядку, а для возврата к началу блока данных требуется дополнительное усилие (перемотка).
Чтобы открыть для чтения файл, который был указан при вызове assign, нужно использовать процедуру reset(TxtFile: text); После такого действия «читающая головка» будет установлена на начало файла. Разумеется, указанный файл должен существовать на диске, в противном случае в программе возникнет ошибка.
После открытия файла можно начинать чтение данных. Для этого используются процедуры read и readln, которые используются в следующем формате: read(TxtFile: text, v1: type1, v2: type2, ... vN: typeN); readln(TxtFile: text, v1: type1, v2: type2, ... vN: typeN); Первая процедура читает последовательно из файла значения и помещает их в переменные v1, v2, ... vN. После каждого прочитанного значения указатель файла («читающая головка») смещается к началу следующего значения. Процедура readln делает то же самое, после чего перемещает указатель на начало следующей строки; readln с одним лишь первым параметром переводит указатель на начало новой строки. В качестве параметров для процедур read и readln можно использовать переменные следующих типов: целые: integer, byte, shortint, word, longint; вещественные: real, single, double, extended, comp; строковые (string); символьные (char).
При чтении строковых значений из файла берётся вся последовательность символов от позиции указателя до конца строки. Если после этого попытаться вновь прочитать строку, то результат будет пустой строкой ( ' ' ). Если попытаться прочитать число, когда указатель файла стоит в конце строки, то будет прочитан 0.
Страницы: 1, 2, 3, 4, 5, 6