|
Часть 8
{$I-}
Assign(f, FileName);
Reset(f);
Close(f);
{I+}
FileExists := (IOResult = 0) and (FileName <> '');
end; { FileExists };
begin
if FileExists(ParamStr(1)) then { получить из командной
строки имя файла }
Writeln('Файл существует');
else
Writeln('Файл не найден');
end.
------------------------------------------------------------
Процедура RestoreCrtMode Модуль Graph
------------------------------------------------------------
Функция: Возвращает режим экрана в исходное состояние
(то, какое существовало до инициализации графики).
Описание: RestoreCrtMode
Примечания: Восстанавливает исходный видеорежим, обна-
руженный процедурой InitGraph. Данная процедура может ис-
пользоваться вместе с процедурой SetGraphMode для переключе-
ния между текстовым и графическим режимом.
Аналогичная процедура имеется в версии 2.0 Турбо-Си.
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуры DetectGraph, InitGraph,
SetGraphMode.
Пример:
uses Graph;
var
GraphDriver, GraphMode : integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
OutText('Для выхода из графики нажмите RETURN:');
Readln;
RestoreCrtMode;
Writeln('Теперь вы в текстовом режиме');
Readln;
SetGraphMode(GetGraphMode);
OutTextXY(0, 0, 'Вы снова в графическом режиме');
OutText(0, TextHeight('H'), 'Для выхода нажмите RETURN');
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура Rewrite
------------------------------------------------------------
Функция: Создает и открывает новый файл.
Описание: Rewrite(f [ : file; разм_записи : word ] )
Примечания: Параметр f является файловой переменной,
соответствующей любому типу файла. Он должен быть связан с
внешним файлом с помощью процедуры Assign. Параметр
"разм_записи" представляет собой необязательное выражение
длиной в слово и может указываться только в том случае, если
f является нетипизованным файлом.
Процедура Rewrite создает новый внешний файл, имя кото-
рого присвоено f. Если внешний файл с указанным именем уже
существует, то он удаляется и на его месте создается новый
пустой файл. Если файл f уже открыт, то он сначала закрыва-
ется, а затем открывается вновь. Текущая позиция в файле ус-
танавливается на начало файла. Если f было присвоено пустое
имя (например, Assign(f,'')), то после обращения к
процедуре Reset(f) будет ссылкой на стандартный файл ввода
(стандартный канал номер 1).
Если f - текстовый файл, то он становится доступным
только по записи. После обращения к процедуре Rewrite Еоf(f)
принимает значение Тruе, если файл пуст, и значение False в
противном случае.
Если f является нетипизованным файлом, то параметр
"разм_записи" определяет размер записи, который должен ис-
пользоваться при передаче данных. Если этот параметр опущен,
то он подразумевается равным по умолчанию 128 байтам.
При указании директивы компилятора {$I-} функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в против-
ном случае.
Отличия: В версии 3.0 Турбо-Паскаля пустое имя файла
было недопустимо.
Прочее: См. также процедуры Reset, Append, Assign.
Пример:
var f : text;
begin
Assign(f,'NEWFILE,$$$');
Writeln(f,'Создается файл, в который записывается эта
строка');
Close(f);
end.
------------------------------------------------------------
Процедура RmDir
------------------------------------------------------------
Функция: Удаляет пустой подкаталог.
Описание: RmDir(s : string)
Примечания: Параметр s является выражением строкового
типа. Удаляется подкаталог с путем доступа, заданным строкой
s. Если путь доступа не существует, является непустым или
если он задает текущий католог, то происходит ошибка вво-
да-вывода.
При указании директивы компилятора {$I-} функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в против-
ном случае.
Прочее: См. также процедуры MkDir, ChDir, GetDir.
Пример:
begin
{$I-}
{ получить имя каталога из командной строки }
RmDir(ParamStr(1));
if IOResult <> 0 then
Writeln('Каталог удалить нельзя');
else
Writeln('Каталог удален');
------------------------------------------------------------
Функция Round
------------------------------------------------------------
Функция: Округляет значение вещественного типа до зна-
чения целого типа.
Описание: Round(x : real)
Тип результата: Длинный целый (longint).
Примечания: Параметр x представляет собой выражение ве-
щественного типа. Функция Round возвращает значение длинного
целого типа, которое является значением x, округленным до
ближайшего целого числа. Если значение x находится точно по-
середине между двумя целыми числами, то результатом будет
число с большим обсолютным значением. Если округленное зна-
чение x не соответствует диапазону представления длинного
целого типа, то во время выполнения происходит ошибка.
Отличия: В версии 3.0 Турбо-Паскаля функция Round возв-
ращает целое значение.
Прочее: См. также функции Trunc, Int.
------------------------------------------------------------
Процедура RunError
------------------------------------------------------------
Функция: Останавливает выполнение программы и генериру-
ет ошибку времени выполнения.
Описание: RunError [ (код_ошибки : word ) ]
Примечания: Процедура RunError аналогична процедуре
Halt, но в дополнение к остановке программы она генерирует
на текущем операторе ошибку времени выполнения. Парвметр
"код_ошибки" представляет собой номер ошибки времени выпол-
нения (0 опущен). Если текущий модуль был скомпилирован с
установленной опцией Debug Information (Отладочная информа-
ция), и вы запускаете программу из среды интерактивной от-
ладки, то Турбо-Паскаль обрабатывает обращение к RunErrorа
как обычную ошибку времени выполнения.
Прочее: См. также процедуру Halt.
Пример:
{$IFDEF Debug}
if P = nil then RunError(204);
{$EDNIF}
------------------------------------------------------------
Процедура Sector Модуль Graph
------------------------------------------------------------
Функция: Вычерчивает и заполняет эллиптический сектор.
Описание: Sector(x, y : integer; нач_угол, кон_угол
XРадиус, YРадиус : word)
Примечания: Процедура использует (X,Y), как точку цен-
тра, парметры "XРадиус", "YРадиус" определяют, соответствен-
но, горизонтальный и вертикальный радиусы. Сектор вычерчива-
ется от начального угла "нач_угол" до конечного угла
"кон_угол". Сектор рисуется текущим цветом и закрашивается с
использованием образца закразки и цвета, заданных с помощью
процедур SetFillStyle или SetFillPattern.
Если задан начальный угол 0 и конечный угол 360, то бу-
дет нарисован и закрашен полный эллипс. Углы для процедур
Arc, Ellipse, FillEllipse, PieSlice задаются против часовой
стрелки, при этом углу 0 соответствует 3 часа, 90 градусов -
12 часов и т.д.
Если при заполении сектора происходит ошибка, то функ-
ция GraphResult возвращает значение -6 (grNoScanMem).
Аналогичная процедура имеется в версии 2.0 Турбо-Си.
Ограничения: Должен использоваться графический режим.
Пример:
uses
Graph;
const
R = 50;
var
Driver, Mode : integer;
Xasp, Yasp : word;
begin
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
Sector(GetMaxX div 2, GetMaxY div 2, 0, 45, R, R);
GetAspectRatio(Xasp, Yasp); { нарисовать сектор круга }
Sector(GetMAxX div 2, GetMaxY div 2, { точка центра }
180, 135, { зеркальное отражение выбранного
ранее угла }
R, R * LongInt(Xasp) div Yasp);
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура Seek
------------------------------------------------------------
Функция: Перемещает текущую позицию в файле к заданному
элементу.
Описание: Seek(f, n : longint)
Примечания: Параметр f является любой файловой перемен-
ной, кроме текстовой, а n представляет собой выражение цело-
го типа. Текущая позиция в файле f перемещается к элементу с
номером n. Номер первого элемента файла равен 0. Для того,
чтобы расширить файл, можно выполнить поиск элемента файла,
расположенного за последним элементом. То есть оператор
Sееk(f,FileSize(f)) перемещает текущую позицию в файле в ко-
нец файла.
При указании директивы компилятора {$I-} функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в против-
ном случае.
Ограничения: Процедуру нельзя использовать для тексто-
вых файлов. Файл должен быть открыт.
Отличия: В версии 3.0 Турбо-Паскаля n было целым чис-
лом. В процедуре LongSeek можно задавать вещественное значе-
ние номера n.
Прочее: См. также процедуру FilePos.
------------------------------------------------------------
Функция SeekEof
------------------------------------------------------------
Функция: Возвращает для файла статус "конец файла"
(end-of-file).
Описание: SeeEof [ (var f : text) ]
Тип результата: Булевский (boolean).
Примечания: За исключением того, что функция SеекЕоf
пропускает все пробелы, знаки табуляции и метки конца стро-
ки, она полностью соответствует функции Еоf. Ее полезно ис-
пользовать при считывании числовых значений из текстового
файла.
При указании директивы компилятора {$I-} функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в против-
ном случае.
Ограничения: Функцию можно использовать только для тек-
стовых файлов. Файл должен быть открыт.
Прочее: См. также функции Eof, SeekEoln.
------------------------------------------------------------
Функция SeekEoln
------------------------------------------------------------
Функция: Возвращает для файла сотояние "конец строки"
(end-of-line).
Описание: SeekEoln [ (var f : text) ]
Тип результата: Булевский (boolean).
Примечания: За исключением того, что функция SеекЕоln
пропускает все пробелы и знаки табуляции, она полностью со-
ответствует функции Еоln. Ее полезно использовать при считы-
вании числовых значений из текстового файла.
При указании директивы компилятора {$I-} функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в против-
ном случае.
Ограничения: Функцию можно использовать только для тек-
стовых файлов. Файл должен быть открыт.
Прочее: См. также функции Eoln, SeekEof.
------------------------------------------------------------
Функция Seg
------------------------------------------------------------
Функция: Возвращает сегмент для указанного объекта.
Описание: Seg(x)
Тип результата: Слово (word).
Примечания: Параметр x представляет собой любую пере-
менную или идентификатор процедуры или функции. Результат
длиной в слово является адресом сегмента для x.
Прочее: См. также функции Ofs, Addr.
------------------------------------------------------------
Процедура SetActivePage Модуль Graph
------------------------------------------------------------
Функция: Устанавливает для графического вывода активную
страницу.
Описание: SetActivePage(страница : word)
Примечания: Страница, заданная параметром "страница",
становится активной. Весь графический вывод будет теперь
направляться в эту страницу.
Возможность использования нескольких страниц поддержи-
вается только в графических адаптерах ЕGА, VGА и Неrcules.
При использовании нескольких графических страниц программа
может выводить графическую информацию в страницу, не выводи-
мую в данный момент на экран, а затем быстро вывести на эк-
ран этот двоичный образ, сменив отображаемую страницу с по-
мощью процедуры SetVisualPage. Этот метод особенно полезен
при программировании мультипликации.
Аналогичная процедура имеется в версии 2.0 Турбо-Си.
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуру SetVisualPage.
Пример:
uses Graph;
var
GraphDriver, GraphMode : integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
begin
ClearDivice;
SetVisualPage(0);
SetActivePage(1);
Rectangle(10,20,30,40);
SetVisualPage(1);
end;
else
OutText('Страничный режим не поддерживается');
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура SetAllPalette Модуль Graph
------------------------------------------------------------
Функция: Изменяет все цвета палитры на указанные.
Описание: SetAllPalette(var палитра)
Примечания: Параметр "палитра" является нетипизованным
параметром. Первое его слово представляет собой длину палит-
ры. Следующие n байтов заменяют текущие цвета палитры. Каж-
дый цвет может принимать значение от -1 до 15. Значение -1
не изменяет предыдущее значение записи.
Имейте в виду, что допустимые цвета зависят от текущего
графического драйвера и текущего графического режима.
Изменения, вносимые в палитру, немедленно отображаются
на экране. При любом изменении цвета палитры все места на
экране, где этот цвет используется, будут изменены в соот-
ветствии с вновь заданным значением.
Определены следующие константы и типы:
{ цвета для процедур SetРаlette и SetАllРаlette }
Black = 0; { черный }
Blue = 1; { синий }
Green = 2; { зеленый }
Cyan = 3; { бирюзовый }
Red = 4; { красный }
Magenta = 5; { малиновый }
Brown = 6; { коричневый }
LightGray = 7; { светло-серый }
DarkGray = 8; { темно-серый }
LightBlue = 9; { светло-голубой }
LightGreen = 10; { светло-зеленый }
LightCyan = 11; { светло-бирюзовый }
LightRed = 12; { светло-красный }
LightMagenta = 13; { светло-малиновый }
Yellow = 14; { желтый }
White = 15; { белый }
MaxColors = 15;
type
PaletteType = record
Size : byte;
Colors : array[0..MaxColors] of shortint;
end.
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуры GetBkColor, GetColor,
GetPalette, SetBkColor, SetColor, SetPalette.
Пример:
uses Graph;
var
GraphDriver, GraphMode : integer;
Palette : PaletteType;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
begin
Line(0, 0, GetMaxX, GetMaxY);
with Palette do
begin
Size := 4;
Colors[0] := LightCyan; { светло-голубой }
Colors[1] := Red; { красный }
Colors[2] := Yellow; { желтый }
Colors[3] := White; { белый }
SetAllPalette(Palette);
end;
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура SetAspectRatio Модуль Graph
------------------------------------------------------------
Функция: Изменяет принятое по умолчанию значение коэф-
фициента относительного удлиннения.
Описание: SetAspectRatio(Xasp, Yasp, : word)
Тип результата: Слово (word).
Примечания: Процедура SetAspectRatio применяется для
изменения принятого по умолчанию для текущего графического
режима коэффициента относительного удлиннения. Коэффициент
относительного удлиннения используется при вычерчивании ок-
ружностей. Если окружность выглядит эллиптической, значит
монитор не настроен должным образом. Его можно настроить с
помощью аппратных средств или программным путем, изменив с
помощью процедуры SetAspectRatio коэффициент относительного
удлиннения. Для получения текущего коэффициента относитель-
ного удлиннения можно использовать процедуру GetAspectRatio.
Аналогичная процедура имеется в версии 2.0 Турбо-Си.
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуру GetAspectRatio.
Пример:
uses
Crt, Graph;
const
R = 50;
var
Driver, Mode: integer;
Xasp, Yasp: word;
begin
DirectVideo := false;
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult <> 0 then
Halt(1)
GetAspectRatio(Xasp, Yasp); { получить используемый по
умолчанию коэффициент
относительного удлиннения }
{ Настроить на VGA и 8514. При этом коэффициент
относительного удлиннения = 1.1 }
if Xasp = Yasp then
Xasp := 5 * Xasp;
{ Продолжить изменение значения коэффициента
относительного удлиннения до получения 1:1 или пока
не будет нажата клавиша }
while (Xasp < Yasp) and not KeyPreaaed do
begin
GetAspectRatio(Xasp, Yasp);
Circle(GatMaxX div 2, GetMaxY div 2, R);
Inc(Xasp, 20);
end;
SetTextJustify(CenterText, CenterText);
OutTextXY(GetMaxX div 2, GetMaxY div 2, 'Выполнено!');
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура SetBkColor Модуль Graph
------------------------------------------------------------
Функция: Используя палитру устанавливает текущий фоно-
вый цвет.
Описание: SetBkColor(цвет : word)
Примечания: SetBkColor(0) задает использование первого
цвета палитры в качестве текущего фонового цвета. Фоновые
цвета могут принимать значения в диапазоне от 0 до 15, в за-
висимости от текущего графического драйвера и текущего гра-
фического режима. Для адаптера СGА данная процедура задает
цвет развертки.
Например, в режиме СGАС1 палитра содержит четыре цвета:
черный, красный, желтый и зеленый. SetBkColor(0) выбирает в
качестве фонового цвета черный, значение 1 задает красный
цвет и т.д.
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуры GetBkColor, GetColor,
GetPalette, SetAllPalette, SetColor, SetPalette.
Пример:
uses Crt, Graph;
var
GraphDriver, GraphMode : integer;
Palette : PaletteType
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
Randomize;
If GraphResult <> grOk then
Halt(1);
GetPalette(Palette);
repeat
SetBkColor(Random(Palette.Size));
LineTo(Random(GetMatX),Random(GetMatY));
until KeyPressed { для выхода нажмите клавишу Вrеаk }
CloseGraph;
end.
------------------------------------------------------------
Процедура SetCBreak Модуль Dos
------------------------------------------------------------
Функция: Устанавливает проверяемое операционной систе-
мой ДОС состояние Ctrl-Break.
Описание: SetCBreak(Break : boolean)
Примечания: Данная процедура устанавливает проверяемое
ДОС состояние Ctrl-Break. Когда это состояние выключено
(False), ДОС проверяет Ctrl-Break только во время выполнения
ввода-вывода на консоль, устройство печати или порты. Во
включенном состоянии (True) проверки выполняются при каждом
системном выводе.
Прочее: См. также процедуру GetCBreak.
------------------------------------------------------------
Процедура SetColor Модуль Graph
------------------------------------------------------------
Функция: Используя палитру устанавливает текущий цвет
рисунка.
Описание: SetColor(цвет : word)
Примечания: SetColor(0) задает использование первого
цвета палитры в качестве текущего цвета рисунка. Цвета ри-
сунка могут принимать значения в диапазоне о 0 до 15, в за-
висимости от используемого графического драйвера и графичес-
кого режима. Для адаптера СGА данная процедура задает цвет
развертки.
Например, в режиме СGАС1 палитра содержит четыре цвета:
черный, красный, желтый и зеленый. SetBkColor(0) выбирает в
качестве цвета рисунка черный, значение 1 задает красный
цвет и т. д.
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуры GetBkColor, GetColor, Get-
Palette, SetAllPalette, GetColor, SetPalette.
Пример:
uses Crt, Graph;
var
GraphDriver, GraphMode : integer;
Palette : PaletteType
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
Randomize;
If GraphResult <> grOk then
Halt(1);
GetPalette(Palette);
repeat
SetBkColor(Random(Palette.Size));
LineTo(Random(GetMatX),Random(GetMatY));
until KeyPressed;
end.
------------------------------------------------------------
Процедура SetDate Модуль Dos
------------------------------------------------------------
Функция: Устанавливает текущую дату в операционной сис-
теме.
Описание: SetDate(var год, месяц, число, день_недели :
word)
Примечания: Возвращаемые значения имеют следующие до-
пустимые значения: "год" - 1980..2099, "месяц" - 1..12,
"число" 1..31, "день_недели" - 0..6 (где значение 0 соот-
ветствует воскресенью). Если дата указана неверно, то запрос
игнорируется.
Прочее: См. также процедуры GetDate, GetTime, SetTime.
------------------------------------------------------------
Процедура SetFAttr Модуль Dos
------------------------------------------------------------
Функция: Возвращает атрибуты файла.
Описание: SetAttr(var f; var атриб : byte)
Примечания: Параметр f должнен представляеть собой фай-
ловую переменную (соответствующую типизованному, нетипизо-
ванному или текстовому файлу) для которого должно быть вы-
полнено присваивание файловой переменой, но который не дол-
жен быть открыт. Формирование атрибутов выполняется путем
добавления соответствующих масок, заданных в виде констант в
модуле Dos:
const
{ константы атрибутов файла }
ReadOnly = $01; { только чтение }
Hidden = $02; { "скрытый" файл }
SysFile = $04; { системный файл }
VolumeId = $08; { идентификатор тома }
Directory = $10; { каталог }
Archive = $20; { архивизация }
AnyFile = $3F; { прочий файл }
Коды ошибок можно получить с помощью функции DosError.
Возможными кодами ошибок являются код 3 (недопустимый марш-
рут) и код 5 (доступ к файлу отвергнут).
Ограничения: Файл не может быть открыт.
Прочее: См. также процедуры GetFAttr, GetFTime,
SetFTime.
Пример:
uses Dos;
var
f : file;
begin
Assign(f,'C:\AUTOEXEC.BAT');
SetFAttr(f, Hidden);
Readln;
SetFAttr(f, Archive);
end.
------------------------------------------------------------
Процедура SetFillPattern
------------------------------------------------------------
Функция: Выбирает заданный пользователем образец зак-
раски.
Описание: SetFillPattern(Pattern : FillPatternType;
Color : word)
Примечания: Устанавливает тип закраски и ее цвет для
всех типов закраски, выполняемых процедурами FillPoly, Bar,
FloodFill, Bar3D и PieSlice, битовый образец закраски, зада-
ваемый процедурой Pattern, и цвет, задаваемый процедурой
Color. Тип FillPatternType предварительно определяется сле-
дующим образом:
type
FillPatternType = array[1..8] of byte;
Образец закраски основывается на внутренних байтовых значе-
ниях, содержащихся в массиве Pattern. Этот массив имеет дли-
ну 8 байтов и каждый байт 8 элементам изображения в образце
закраски. Если бит в байте образца закраски принимает значе-
ние 1, то элемент изображения будет построен. Следующий об-
разец закраски представляет собой, например, закраску в виде
"шахматной доски" (50% полутон):
----------------------------------------------------------
Двоичный вид Шестнадцатиричный вид
----------------------------------------------------------
10101010 = $AA (первый байт)
01010101 = $55 (второй байт)
10101010 = $AA (третий байт)
01010101 = $55 (четвертый байт)
10101010 = $AA (пятый байт)
01010101 = $55 (шестой байт)
10101010 = $AA (седьмой байт)
01010101 = $55 (восьмой байт)
----------------------------------------------------------
Определенные пользователем типы закраски позволяют вам
создавать типы закраски, отличающиеся от заранее
определенных, которые могут выбираться с помощью процедуры
SetFillStyle. Всякий раз, когда вы выбираете новый образец
закраски с помощью процедур SetFillPattern или SetFillStyle
все операции закраски будут выполняться с использованием
этого типа закраски. При обращении вида
SetFillStyle(UserField, SomeColor) всегда будет выбираться
образец, заданный пользователем. Это позволяет вам опреде-
лять и использовать с помощью процедуры SetFillPattern новый
образей закраски, а затем переходить от встроенного обраца
закраски к новому, заданному вами, обращаясь к процедуре
YetTextStyle.
Аналогичная программа имеется в версии 2.0 Турбо-Си.
Ограничения: Должен использоваться графический режим.
Пример:
uses
Graph;
const
Gray50 : FillPatternType = ($AA, $55, $AA, $55, $AA, $55,
$AA, $55);
var
Driver, Mode: integer;
begin
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult <> 0 then
Halt(1)
SetFillPattern(Gray50, White);
Bar(0, 0, 100, 100); { нарисовать столбец, используя 50%
полутон }
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура SetFillStyle Модуль Graph
------------------------------------------------------------
Функция: Устанавливает тип закраски и ее цвет.
Описание: SetFillStyle(образец : word; цвет : word)
Примечания: Устанавливает образец и цвет закраски для
всех типов закраски, выполняемых процедурами FillPoly, Bar,
Bar3D, и PieSlice. Можно использовать множество типов зак-
раски. По умолчанию выбирается сплошная закраска белого цве-
та. Определены следующие константы:
{ образцы заполнителей для процедур Get/SetFill/Style }
EmptyFill = 0; { заполнить область фоновым цветом }
SolidFill = 1; { непрерывное заполнение област за-
данным цветом }
LineFill = 2; { заполнить --- }
LtSlashFill = 3; { заполнить /// }
SlashFill = 4; { заполнить жирными линиями ///}
BkSlashFill = 5; { заполнить \\\ (жирными линиями) }
LtBkSlashFill = 6; { заполнить \\\ }
HatchFill = 7; { заполнить редкой штриховкой }
XHatchFill = 8; { заполнить частой пересекающейся
штриховкой }
InterLeaveFill = 9; { заполнить прерывистой линией }
WideDotFill = 10; { заполнить редкими точками }
CloseDotFill = 11; { заполнить частыми точками }
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуры Bar, Bar3D, FillPoly, Get-
FillSettings, PieSlice.
Пример:
SetFillStyle(SolidFill,0);
Bar(x1, y1, x2, y2);
SetFillStyle(XHatchFill,0);
Bar(x1, y1, x2, y2);
------------------------------------------------------------
Процедура SetFTime Модуль Dos
------------------------------------------------------------
Функция: Устанавливает дату и время последней записи
файла.
Описание: SetTime(var f; время : longint)
Примечания: Параметр f должен быть файловой переменной,
соответствующей типизованному, нетипизованному или текстово-
му файлу. Параметр "время" можно сформировать с помощью об-
ращения к процедуре РасkТiме. Ошибки можно получить с по-
мощью функции DosError. Единственно возможным кодом ошибки
является код 6 (недопустимая обработа файла).
Ограничения: Файл f должен быть открыт.
Прочее: См. также процедуры GetFTime, PackTime, UnPack-
Time.
------------------------------------------------------------
Процедура SetGraphMode Модуль Graph
------------------------------------------------------------
Функция: Устанавливает для системы графический режим и
очищает экран.
Описание: SetGraphMode(режим : integer)
Примечания: Параметр "режим" должен задавать для теку-
щего драйвера устройства допустимый графический режим.
Данная процедура используется для выбора графического ре-
жима, отличного от того, который по умолчанию устанавлива-
ется процедурой InitGraph.
Процедура SetGraphMode может также использоваться вмес-
те с процедурой RestoreCrtMode для переключения между тек-
стовым и графическим режимами.
Процедура SetGraphMode сбрасывает все графические пара-
метры (текущий указаетель, палитру, цвет, область просмотра,
и т. д.) в те значения, которые назначаются для них по умол-
чанию.
Если делается попытка выбрать для текущего драйвера
устройства недопустимый режим, то функция GraphResult
возвращает значение -10 (grInvalidMode).
Определены следующие константы:
------------------------------------------------------------
Графический Имя Значение Столбцов Палитра Страниц
драйвер константы х строк
------------------------------------------------------------
CGA CGAC0 0 320x200 C0 1
CGAC1 1 320x200 C1 1
CGAC2 2 320x200 C2 1
CGAC3 3 320x200 C3 1
CGAHi 4 640x200 2 цвета 1
MCGA MCGAC0 0 320x200 C0 1
MCGAC1 1 320x200 C1 1
MCGAC2 2 320x200 C2 1
MCGAC3 3 320x200 C3 1
MCGAMed 4 640x200 2 цвета 1
EGA EGALo 0 640x200 16 цветов 1
ЗЙДКк 1 640щ350 16 цветов 2
ЗЙД64 ЗЙД64Ор 0 640щ200 16 цветов 1
ЗЙД64Кк 1 640щ350 4 цвета 1
EGA- EGAMonoHi 3 640x350 2 цвета 1*
MONO EGAMonoHi 3 640x350 2 цвета 1**
HERC HercMonoHi 0 720x348 2 цвета 2
ATT400 ATT400C0 0 320x200 C0 1
ATT400C1 1 320x200 C1 1
ATT400C2 2 320x200 C2 1
ATT400C3 3 320x200 C3 1
ATT400Med 4 640x200 2 цвета 1
ATT400Hi 5 640x200 2 цвета 1
VGA VGALo 0 640x200 16 цветов 2
VGAMed 1 640x350 16 цветов 2
VGAHi 2 640x480 16 цветов 1
PC3270 PC3270Hi 0 640x200 2 цвета 1
8514 IBM8514Lo 0 640x480 256 цветов 1
8514 IBM8514Hi 0 1024x768 256 цветов 1
------------------------------------------------------------
* - 64К на плате EGAMono
** - 256К на плате EGAMomo
Аналогичная процедура имеется в версии 2.0 Турбо-Си.
Ограничения: Перед обращением к данной процедуре необ-
ходимо выполнить (с нормальным завершением) вызов процедуры
InitGraph.
Прочее: См. также процедуры ClrearDevice, DetectGraph,
GetGraphMode, InitGraph, RestoreCrtMode.
Пример:
uses Graph;
var
GraphDriver : integer;
GraphMode : integer;
LowMode : integer;
HighMode : integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver, GraphMode, '');
if GraphResult <> grOk then
Halt(1);
GetModeRange(GraphDriver, LowMode, HighMode);
SetGraphMode(LowMode); { выбрать режим с низким разрешением
}
Line(0, 0, GetMaxX, GetMaxY);
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура SetIntVec Модуль Dos
------------------------------------------------------------
Функция: Устанавливает по заданному адресу заданный
вектор прерывания.
Описание: SetIntVec(ном_прер : byte; вектор : pointer)
Примечания: Параметр "ном_прер" задает номер вектора
прерывания (0...255), а параметр "вектор" задает его адрес.
Чтобы получить адрес процедуры обработки прерываний параметр
"вектор" часто задается с использованием оператора @. Пред-
положим, что Int1BSave является переменной типа указатель и
Int1BHandler - идентификатор процедуры обработки прерываний.
Тогда следующая последовательность операторов новый обработ-
чик прерывания $В1, а затем восстанавливает исходный обра-
ботчик прерывания:
GetIntVec($1B,Int1BSave);
SetIntVec($1b,@Int1BHandler);
.
.
.
SetIntVec($1B,Int1BSave);
Прочее: См. также процедуру GetIntVec.
-----------------------------------------------------------
Процедура SetLineStyle Модуль Graph
-----------------------------------------------------------
Функция: Устанавливает текущую толщину и тип линии.
Описание: SetLineStyle(тип_строки : word; образец :
word; толщина : word)
Примечания: Данная процедура влияет на все типы линий,
вычерчиваемые процедурами Line, LineTo, RecTangle, DrawPoly,
Arc, Circle и др.
Могут вычерчиваться непрерывные, пунктирные линии, ли-
нии, состоящие из точек или точек и тире.
Если процедуре SetLineStyle иередаются неверные пара-
метры, то GraphResult будет возвращать значение -11
(grError) и текущие установки останутся неизмененными. Опи-
саны следующие константы:
const
SolidLn = 0; { непрерывныя линия }
DottedLn = 1; { линия из точек }
CenterLn = 2; { линия из точек и тире }
DashedLn = 3; { пунктирная линия }
UserDilLn = 4; { тип, определяемый пользователем }
NormWidth = 1; { нормальная толщина }
ThickWidth = 3; { жирная линия }
Когда в качестве параметра процедуру LineStyle переда-
ется UserBitLn, то в качестве BitPattern для строки будет
использоваться параметр "образец".
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуры GetLineStyle, Line, Line-
Rel, LineTo, SetWriteMode, GraphResult.
Пример:
uses Graph;
var
GraphDriver, GraphMode : integer;
x1, y1, x2, y2 : integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
x1 := 10;
y1 := 10;
x2 := 200;
y2 := 150;
SetLineStyle(DottedLn,0,NormVidth);
Rectangle)x1,y1,x2,y2);
SetLineStyle(UserBitLn,$C3,ThickWidth);
Rectangle(Pred(x1), Pred(y1), Succ(x2), Succ(y2));
Фжгенп;
ЕнрфжЙугсй;
жпе.
------------------------------------------------------------
Процедура SetPalette Модуль Graph
------------------------------------------------------------
Функция: Изменяет один из цветов палитры в соответствии
с параметрами "ном_цвета" и "цвет".
Описание: SetPalette(ном_цвета : word; цвет : byte)
Примечания: Изменяет в палитре запись "ном_цвета" на
"цвет". SetPalette(0,LightCyan) устанавливает в качестве
первого цвета палитры светло-бирюзовый. В зависимости от те-
кущего графического драйвера и текущего графического режима
параметр "ном-цвета" может принимать значения от 0 до 15.
Внесенный в палитру изменения немедленно отображаются
на экране. В приведенном далее примере на экране рисуется
несколько строк, затем палитра случайным образом изменяется.
Каждый раз, когда изменяется цвет палитры, все места на эк-
ране, где используется данный цвет, будут изменяться в соот-
ветствии с новым значением.
Определены следующие константы:
Black = 0; { черный }
Blue = 1; { синий }
Green = 2; { зеленый }
Cyan = 3; { бирюзовый }
Red = 4; { красный }
Magenta = 5; { малиновый }
Brown = 6; { коричневый }
LightGray = 7; { светло-серый }
DarkGray = 8; { темно-серый }
LightBlue = 9; { светло-голубой }
LightGreen = 10; { светло-зеленый }
LightCyan = 11; { светло-бирюзовый }
LightRed = 12; { светло-красный }
LightMagenta = 13; { светло-малиновый }
Yellow = 14; { желтый }
White = 15; { белый }
Аналогичная процедура имеется в версии 2.0 Турбо-Си.
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуры GetBkColor, GetColor,
SetAllPalette, SetBkColor, CetColor, SetRGBPalette, GraphRe-
sult. јјј
Пример:
uses Crt, Graph;
var
Graphriver, GraphMode : integer;
Color : word;
Palette : PaletteType;
begin
GraphDriver := Detect;
InitGraph(GraphDriver, GraphMode,'');
if GraphResult <> grOk then
Halt(1);
SetPalette(Palette);
for Color := 0 to Pred(Palette.Size) do
begin
SetColor(Color);
Line(Color, Color, Color*5, Color*5);
end;
Randomize;
repeat;
SetPalette(Random(Palette.Size),
Random(Palette.Size));
until KeyPressed;
end;
else
Line(0, 0, 100, 0);
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура SetRGBPalette Модуль Graph
------------------------------------------------------------
Функция: Позволяет изменить записи палитры для драйве-
ров IBM 8514 и VGA.
Описание: SetRGBPalette(номер_цвета, RedVavue, GreenVa-
lue, BlueValue : integer)
Примечания: Параметр "номер_цвета" задает запись палит-
ры, которую нужно загрузить, а RedValue, GreenValue и
BlueValue - цвета, составляющие запись палитры.
Для дисплея IBM-8514 "номер-цвета" принивает значения в
диапазоне 0..255. Для VGA в цветном режиме и 256К
"номер_цвета" принимает значения в диапазоне 0..15. Исполь-
зуется только младший байт RedValue, GreenValue и BlueValue
и только 6 старших битов этого байта загружаются в палитру.
Замечание: В целях совместимости с другими графи-
ческими адаптерами фирмы IBM драйвер BGI определяет
первые 16 записей палитры IBM-8514 для адаптеров
EGA/VGA. Эти значения могут использоваться непосредст-
венно или изменяться с помощью процедуры
SetRGBPalette.
Аналогичная процедура имеется в версии 2.0 Турбо-Си.
Ограничения: Процедура SetGRBPalette может использо-
ваться только при наличии графического адаптера VGA и драй-
вера IBM-8514.
Прочее: См. также процедуру SetPalette.
Пример:
uses Graph;
type
GRBRec = record
RedVal, GreenVal, BlueVal : integer;
end;
const
EGAColors : array[0..MaxColors] of
GRBRec =( { Назв. Цвет }
(RedVal:$00;GreenVal:$00;BlueVal:$00), {черный EGA 0}
(RedVal:$00;GreenVal:$00;BlueVal:$FC), {голуб. EGA 1}
(RedVal:$24;GreenVal:$FC;BlueVal:$24), {зелен. EGA 2}
(RedVal:$00;GreenVal:$FC;BlueVal:$FC), {бирюз. EGA 3}
(RedVal:$FC;GreenVal:$14;BlueVal:$14), {красн. EGA 4}
(RedVal:$B0;GreenVal:$00;BlueVal:$FC), {малин. EGA 5}
(RedVal:$70;GreenVal:$48;BlueVal:$FC), {корич. EGA 20}
(RedVal:$C4;GreenVal:$C4;BlueVal:$C4), {белый EGA 7 }
(RedVal:$34;GreenVal:$34;BlueVal:$34), {серый EGA 56}
(RedVal:$00;GreenVal:$00;BlueVal:$70), {св.гол.EGA 57}
(RedVal:$00;GreenVal:$70;BlueVal:$00), {св.зел.EGA 58}
(RedVal:$00;GreenVal:$70;BlueVal:$70), {св.бир.EGA 59}
(RedVal:$70;GreenVal:$00;BlueVal:$00), {св.кр. EGA 60}
(RedVal:$70;GreenVal:$00;BlueVal:$70), {св.мал.EGA 61}
(RedVal:$FC;GreenVal:$FC;BlueVal:$24), {желтый EGA 62}
(RedVal:$FC;GreenVal:$FC;BlueVal:$FC), {т.белыйEGA 63}
);
var
Driver, Mode,
i : integer;
bagin
Driver := IBM8514; { отменить автообнаружение }
Mode := IBM8514Hi;
InitGraph(Driver, Mode, ''); { перевести в
графический режим }
if GraphResult < 0 then
Halt(1);
{ нулевая палитря, весь графический вывод невидим }
for i := 0 to MaxColors do
with EGAColors[i] do
SetRGBPalette(i, 0, 0, 0);
{ вывести что-нибудь на экран }
{ изменить первый 16 записей палитры для 8514 }
for i := 1 to MaxColors do
begin
SetColor(i);
OutText(10, i*10, '...Нажмите любую клавишу..');
end;
{ восстановить принятые по умолчанию цвета EGA в
палитру 8514 }
for i := 0 to MaxColors do
with EGAColors[i] do
SetRGBPalette(i, RedVal, GreenVal,
BlueVal);
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура SetTextBuf
------------------------------------------------------------
Функция: Назначает для текстового файла буфер ввода-вы-
вода.
Описание: SetTextBuf(var f : text; var буфер [ ; размер
: word ] )
Примечания: Параметр f представляет собой файловую пе-
ременную, соответствующую текстовому файлу. Параметр "буфер"
- любая переменная, а параметр "размер" - необязательное вы-
ражение длиной в слово.
Каждая файловая переменная для текстового файла
имеет внутренний буфер размером в 128 байтов, что по
умолчанию используется для буферизации операций чтения
и записи. Этот буфер подходит для использования во
многих прикладных задачах, однако программы, выполняю-
щие много операций ввода-вывода (например, задачи, выполняю-
щие копирование или преобразование текстовых файлов) будут
лучше работать с буфером большего размера, поскольку это
уменьшает перемещение головки по поверхности диска и избы-
точное использование файловой системы.
Процедура SetTextBuf переназначает буфер, используемый
для текстового файла f: вместо внутреннего буфера файла f
используется буфер, заданный параметром "буфер". Параметр
"размер" задает размер буфера в байтах. Если этот параметр
опущен, то подразумевается использование SizeOf(буфер), то
есть по умолчанию в качестве буфера используется вся область
памяти, занятая буфером. Новый буфер действует до тех пор,
пока для f вновь не выполняется процедура Assign.
Ограничения: Данная процедура никогда не должна приме-
няться для открытого файла, хотя вызывать ее можно немедлен-
но вслед за обращением к процедурам Reset, Rewrite и Аppеnd.
Вызов процедуры SetTextBuf для открытого файла во время вы-
полнения операций ввода-вывода может из-за смены буфера при-
вести к потере данных.
Турбо-Паскаль не обеспечивает существование буфера на
все время выполнения операций ввода-вывода для файла. Общей
ошибкой, в частности, является введение качестве буфера ло-
кальной переменной и затем использование файла вне процеду-
ры, в которой описывается буфер.
Отличия: В версии 3.0 Турбо-Паскаля использовался
другой синтаксис - var f:text[2048].
Пример:
var
f : text;
ch : char;
buf : char; { буфер 10 К }
begin
{ назначить для файла считывание из командной строки }
Assign(f, ParamStr(1));
{ ввести для более быстрого чтения буфер большего
размера }
SetTextBuffer(f, buf);
Reset(f);
{ вывести текстовый файл на экран }
while not Eof(f) do
begin
Read(f, ch);
Write(ch);
end;
end.
------------------------------------------------------------
Процедура SetTextJustify Модуль Graph
------------------------------------------------------------
Функция: Устанавливает значения выравнивания текста,
которые используются процедурами OutText и OutTextXY.
Описание: SetTextJustify(гориз, верт : word)
Примечания: После процедуры SetTextJustify вывод
текста будет выравниваться по текущему указателю задан-
ным способом. При использовании двух следующих операторов
SetTextJustify(CenterText, CenterText);
OutTextXY(100, 100, 'ABC');
в середине точки с координатами (100,100) появится буква В.
Установленные по умолчанию параметры выравнивания можно вос-
становить с помощью вызова SetTextJustify(LeftText,TopText).
Если процедуре SetTextJustify передаются недопустимые пара-
метры, функция GraphResult будет возвращать значение -11
(grError), а текущие параметры выравнивания текста останутся
неизмененными.
Определены следующие константы:
const
{ горизонтальное выравнивание }
LeftText = 0; { выровнять влево }
CenterText = 1; { центрировать }
RightText = 2; { выровнять вправо }
{ вертикальное выравнивание }
BottomText = 0; { переместить вниз }
CenterText = 1; { центрировать }
TopText = 2; { переместить вверх }
Аналогичная процедура имеется в версии 2.0 Турбо-Си.
Ограничения: Должен использоваться графический
режим.
Прочее: См. также процедуры SetLineStyle, OutTextXY,
GetTextSettings, OutText, TextHeight, TextWidth, SetUser-
CharSize, GraphResult.
Пример:
uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
{ выравнивание текста относительно центра экрана }
SetTextJustify(CenterText, CenterText);
OutTextXY(Succ(GetMaxX) div 2,
Succ(GetMaxY) div 2,
'Легко центрируется');
Фжгенп;
ЕнрфжЙугсй;
жпе.
------------------------------------------------------------
Процедура SetTextStyle Модуль Graph
------------------------------------------------------------
Функция: Устанавливает текущий шрифт, тип и коэффициент
размера символа.
Описание: SetTextStyle(шрифт : word; направление :
word; разм_символа : CharSizeType)
Примечания: Процедура влияет на весь текстовый вывод,
выполняемый процедурами OutText и OutTextXY. Можно использо-
вать один шрифт с двоичным образом 8х8 и несколько "штрихо-
вых" шрифтов. Поддерживается нормальное (слева направо) рас-
положение шрифта и вертикальное (развернутое на 90 градусов
относительно нормального расположения), при котором текст
начинается с нижней границы экрана и продолжается вверх.
Размер каждого символа может увеличиваться на коэффициент,
задаваемый параметром "разм_символа". Значение размера сим-
вола, равное единице, приводит к выводу двоичного образа
шрифта 8х8 в прямоугольную область экрана, содержащую 8х8
элементов изображения, параметр "разм_символа", равный 2
приведет к выводу на экран двоичного образа шрифта 8х8 в
прямугольную область элементов изображения размером 16х16 и
т. д. (вплоть до десятикратного увеличения нормального раз-
мера). Для определения действительных размеров шрифта всегда
используйте процедуры TextHeight и TextWidth.
Нормальными значениями размера для шрифта являются 1
для принятого по умолчанию шрифта и 4 для "штрихового" шриф-
та. Эти значения можно передавать процедуре SetTextStyle в
параметра "разм_символа". Для настройки размера "штрихового"
текстового шрифта можно использовать процедуру SetUserFont.
Обычно "штриховые" шрифты при обращении к процедуре
SetTextStyle "штриховые" шрифты загружаются с диска в дина-
мически распределяемую область памяти. Однако, вы сами може-
те загрузить шрифты или скомпоновать их непосредственно с
вашим файлом .EXE. В этом случае для регистрации шрифта мо-
дулем Graph используйте процедуру RegisterBGIfont.
Когда "штриховые" шрифты хранятся на диске, при попытке
их загрузки могут происходить ошибки. При наличии ошибок
функция GraphResult возвращает одно из следующих значений:
-8 - файл не найден;
-9 - не хватает памяти для загрузки выбранного шрифта;
-11 - ошибки графики;
-12 - графическая ошибка ввода-вывода;
error in text ..................
вдвое выше, используйте для MultX значение 2, а DivX задайте
равным 1 (2 div 1 = 2).
После вызова процедуры SetUserCharSize для того, чтобы
шрифт получил новый размер, вам не нужно сразу вызывать про-
цедуру SetTextStyle. При обращении к процедуре
SetUserCharSize для текущего символа устанавливается задан-
ный размер.
Аналогичная процедура имеется в версии 2.0 Турбо-Си.
Ограничения: Должен использоваться графический режим.
Пример: В данном примере показано, как можно изменить
высоту и ширину шрифта.
uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
SetTextStyle(TriplexFont, HorizDir, 4);
OutText(Нормальный размер');
SetUserCharSize(1, 3, 1, 1);
OutText(Уменьшенный по высоте размер');
SetUserCharSize(3, 1, 1, 1);
OutText(Широкий шрифт');
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура SetVerify Модуль Dos
------------------------------------------------------------
Функция: Устанавливает в ДОС состояние флага проверки.
Описание: SetVerify(Verify : boolean)
Примечания: Процедура SetVerify устанавливает в опера-
ционной системе ДОС состояние флага проверки. В сброшенном
состоянии (False) проверка операций записи на диск не выпол-
няется. В установленном состоянии флага (True) при операциях
записи на диск выполняется поверки правильности выполнения
операции.
Прочее: См. также процедуру GetVerify.
------------------------------------------------------------
Процедура SetVievPort Модуль Graph
------------------------------------------------------------
Функция: Устанавливает для графического вывода
текущую область просмотра или окно.
Описание: SetViewPort(х1, у1, х2, у2 : word;
Примечания: Точка (x1,y1) задает верхний левый
угол области просмотра, а точка с координатами (x2,y2)
определяет нижний правый угол (0 <= y1 < x2 и 0 <= y1
< y2). Левый верхний угол экрана задается координатами
(0,0).
Булевская переменная Сliр определяет будет ли изоб-
ражение отсекаться текущими границами области просмотра.
Процедура SetVievPort(0,0,GetMaxX,GetMaxY,True) всегда за-
дает в качестве области просмотра все поле графического эк-
рана. Определены следующие константы:
const
ClipOn := true;
ClipOff := false;
Все графические команды (например, GetX, ОutТехt, Rec-
tangle, МоvеТо и т. д.) зависят от текущей области просмот-
ра. В качестве примера заметим, что процедура МоvеТо переме-
щает текущий указатель в точку (5,5) внутри области просмот-
ра (абсолютными координатами данной точки были бы координаты
(15,25)).
(0,0) (GetMaxX,0)
-------------------------------------
! !
! !
! --------- !
! ! ! !
! ! . ! !
! ! ! !
! --------- !
! !
! !
-------------------------------------
(0,GetMaxY) (GetMaxX,GetMaxY)
Если булевская переменная Сliр установлена в значение
Тruе, то, когда выполняется обращение к процедуре SetViewP-
ort, все рисунки будут обрезаться на границах текущей облас-
ти просмотра. Заметим, что "текущий указатель" никогда не
отсекается. В следующем примере прямая линия не будет нари-
сована полностью, поскольку она будет обрезана на границе
области просмотра:
SetWiewPort(10, 10, 20, 20, ClipOn);
Line(0, 5, 15, 5);
Если бы не выполнялось отсечение, то прямая должна была
бы начинаться в точке с абсолютными координатами (10,15) и
заканчиваться в точке с абсолютными координатами (25,15).
Но, поскольку выполнялось отсечение, то в действительности
прямая будет вычерчиваться, начиная с точки с абсолютными
координатами (10,15), и заканчиватся в точке (20,15).
Процедуры InitGraph, ClearDevice и SetGraphMode сбрасы-
вают определение текущей области просмотра и устанавливают в
качестве области просмотра весь экран. Текущее определение
области просмотра можно получить с помощью процедуры Get-
ViewSettings, которая воспринимает параметры следующего гло-
бального типа:
type
ViewPortType = record
x1, y1, x2, y2 : word;
Clip : boolean;
end;
Процедура SetViewPort перемещает текущий указатель в
точку с координатами (0,0).
Аналогичная процедура имеется в версии 2.0 Турбо-Си.
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуры ClearViewPort, GetViewSet-
tings, GraphResult.
Пример:
uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
if (gd = HercMono)
or (gd = EGA or (Gd = EGA64) or (Gd = VGA)
then
begin
SetVisualPage(0);
SetActivePAge(1);
Rectangle(10, 20, 30, 40);
SetVisualPage(1);
end;
else
OutText('Страничный режим не поддерживается');
Readln;
CloseGraph;
end.
Пример 2:
const
vp1 : ViewPortType =
(x1 : 10; y1 : 80; x2 : 100; y2 : 150; Clip :
ClipOn);
vp2 : ViewPortType =
(x1 : 110; y1 : 0; x2 : 150; x2 : 70; Clip :
ClipOn);
var
GraphDriver, GraphMode : integer;
begin
GraphDriver := Detect;
InitGparh(GraphDrivet,GraphMode,'');
if GraphRasult <> grOk then
Halt(1);
with vp1 do
begin
Rectangle(Succ(x1), Succ(y1), { нарисовать
контур
области
просмотра }
Pred(x2), Pred(y2));
SetViewPort(x1, y1, x2, y2, ClipOn);
OutText('Область просмотра');
end;
{ полный экран }
SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn);
with vp2 do
begin
{ нарисовать контур второй области просмотра }
Rectangle(Succ(x1), Succ(y1), { нарисовать
контур
области
просмотра }
Pred(x2), Pred(y2));
SetViewPort(x1, y1, x2, y2, ClipOn);
OutText('Область просмотра 2');
end;
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура SetVisualPage Модуль Graph
------------------------------------------------------------
Функция: Задает номер отображаемой графической стра-
ницы.
Описание: SetVisualPage(страница : word)
Примечания: Страница, определяемая параметром "страни-
ца", становится отображаемой графической страницей.
Использование нескольких графических страниц поддержи-
вается только графическими адаптерами ЕGА, VGА и Неrcules.
При использовании нескольких графических страниц программа
может выводить графическую информацию в страницу, не выводи-
мую в данный момент на экран, а затем быстро вывести на эк-
ран этот двоичный образ, сменив отображаемую страницу с по-
мощью процедуры SetVisualPage. Этот метод особенно полезен в
мультипликации.
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуру SetActivePage.
Пример:
uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
if (gd = HercMono)
or (gd = EGA or (Gd = EGA64) or (Gd = VGA)
then
begin
SetVisualPage(0);
SetActivePAge(1);
Rectangle(10, 20, 30, 40);
SetVisualPage(1);
end;
else
OutText('Страничный режим не поддерживается');
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура SetWriteMode Модуль Graph
------------------------------------------------------------
Функция: Устанавливает режим записи при вычекчивании
линии.
Описание: SetWriteMode(реж_записи : integer)
Примечания: Определены следующие констанлы:
const
CopyPut = 0; { MOV }
XORPut = 1; { XOR }
Каждая константа соответствует двоичной операции между
каждым байтом строки и соответствующим байтом экрана. Для
константы CopyPut используется инструкция ассемблера MOV.
При этом вычерчиваемая линия "затирает" то, что было на эк-
ране. Для константы XORPut для комбинирования линии с изоб-
ражением на экране используется инструкция XOR. Две последо-
вательные операции XOR приведут к стираних линии и восста-
новлению исходного изображения на экране.
Замечание: Процедура SetWriteMode влияет только
на обращение к следующим процедурам: DrowPoly, Line,
LineRel, LineTo и Rectangle.
Аналогичная процедура имеется в версии 2.0 Турбо-Си.
Прочее: См. также процедуры PutImage и SetLinkStyle.
Пример:
uses Graph;
var
Gd, Gm : integer;
i : integer;
x1, y1, dx, dy : integer;
FillInfo : FillSettingsType;
begin
DirectVideo := false; { "выключить" запись на
экран }
Randomize;
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
{ заполнить экран используемым по умолчанию
образцом }
GetFillSettings(FillInfo); { получить текущие
параметры }
SetFillStyle(WideDotFill, FillInfo.Color);
Bar(0, 0, GetMaxX, GetMaxY);
dx := GetMAxX div 4; { задать размерность
прямоуголиника }
dy := GetMaxY div 4;
SetLineStyle(SolidLn, 0, ThickWidth);
SetWriteMode(XORPut); { режим XOR для
прямоугольника }
repeat
x1 := Random(GetMaxX - dx);
y1 := Random(GetMaxY - dy); { нарисовать его }
Delay(0); { короткая пауза }
Rectangle(x1, y1, x1 + dx, y1 + dy) { стереть
его }
until KeyPressed;
Readln;
CloseGraph;
end.
------------------------------------------------------------
Функция Sin
------------------------------------------------------------
Функция: Возвращает синус аргумента.
Описание: Sin(x : real)
Тип результата: Вещественный (real).
Примечания: Параметр x является выражением вещественно-
го типа. Результатом будет синус x. Предполагается, что это
значение задает угол в радианах.
Пример:
var
r : real;
begin
у :А Хкп(Тк);
end.
------------------------------------------------------------
Функция SizeOf
------------------------------------------------------------
Функция: Возвращает число байтов, занимаемых аргумен-
том.
Описание: SizeOf(x)
Тип результата: Слово (word).
Примечания: Параметр x является ссылкой на переменную
или идентификатором типа. Данная фунция возвращает число
байтов памяти, занимаемых x.
При передаче значений функциям FillChar, Моvе, GetМем
всегда следует использовать функцию SizeOf:
FillChar(s, SizeOf(s), 0);
GetMem(p, SizeOf(RecordType));
Пример:
type
CustRec = record
Name : string[30];
Phone : string[14];
end;
var
p : ^CustRec;
begin
GetMem(p, SizeOf(CustRec));
end.
------------------------------------------------------------
Процедура Sound Модуль Сrt
------------------------------------------------------------
Функция: Включает внутренний динамик.
Описание: Sound(герц : word)
Примечания: Параметр "герц" задает частоту генерируемо-
го сигнала в герцах. Звуковой сигнал будет звучать до тех
пор, пока он не будет явным образом выключен обращением к
процедуре NoSound.
Прочее: См. также процедуру NoSound.
Пример:
uses Crt;
begin
Sound(220); { сигнал }
Delay(200); { пауза }
NoSound; {
выключить }
------------------------------------------------------------
Функция SPtr
------------------------------------------------------------
Функция: Возвращает текущее значение регистра SР.
Описание: SPtr : word;
Тип результата: Слово (word).
Примечания: Результат длиной в слово представляет собой
смещение указателя стека внутри сегмента стека.
Прочее: См. также функцию Sseg.
------------------------------------------------------------
Функция Sqr
------------------------------------------------------------
Функция: Возвращает квадрат аргумента.
Описание: Sqr(x)
Тип результата: Совпадает с типом параметра.
Примечания: Параметр x представляет собой выражение це-
лого или вещественного типа. Результат, имеющий тот же тип,
что и x, представляет собой квадрат x, то есть x*x.
------------------------------------------------------------
Функция Sqrt
------------------------------------------------------------
Функция: Возвращает квадратный корень аргумента.
Описание: Sqrt(x : real)
Тип результата: Вещественный ( еа ).
Примечания: Параметр x представляет собой выражение ве-
щественного типа. Результатом является квадратный корень x.
------------------------------------------------------------
Функция SSeg
------------------------------------------------------------
Функция: Возвращает текущее значение регистра SS.
Описание: SSeg : word
Тип результата: Слово (word).
Примечания: Результат длиной в слово представляет собой
адрес сегмента для сегмента стека.
Прочее: См. также функции Sptr, Cseg, Dseg.
------------------------------------------------------------
Процедура Str
------------------------------------------------------------
Функция: Преобразует численное значение в его строковое
представление.
Описание: Str(х [ : размер [ : десят ] ], var s :
string)
Примечания: Параметр x является выражением целого или
вещественного типа. Параметры "размер" и "десят" представля-
ют собой выражения целого типа. Параметр s - строковая пере-
менная. Данная функция преобразует x в его строковое предс-
тавление в соответствии в параметрами форматирования "раз-
мер" и "десят". За исключением того, что результирующая
строка сохраняется в параметре s, вместо того, чтобы записы-
ваться в текстовый файл, результат выполения процедуры будет
в точности тот же самый, что и при обращении к стандартной
процедуре Write.
Прочее: См. также процедуры Val, Write.
Пример:
function IntToStr(i : longint) : string;
{ преобразует любое значение целого типа в строку }
var
s : string[1];
begin
Str(i,s);
IntToStr := s;
end;
begin
Writeln(IntToSt(-5322));
end.
------------------------------------------------------------
Функция Succ
------------------------------------------------------------
Функция: Возвращает следующее значение аргумента.
Описание: Succ(x)
Тип результата: Совпадает с типом параметра.
Примечания: Параметр x - выражение перечислимого типа.
Результат, имеющий тот же тип, что и x, является следующим
элементом x.
Прочее: См. также функции Pred, Inc.
------------------------------------------------------------
Функция Swap
------------------------------------------------------------
Функция: Переставляет местами старший и младший байты
аргумента.
Описание: Swap(x)
Тип результата: Совпадает с типом параметра.
Примечания: Параметр x - выражение целого типа или сло-
во.
Прочее: См. также функции Hi, Lo.
Пример:
var
x : word;
begin
x := Swap($1234); { $3412 }
end.
------------------------------------------------------------
Процедура SwapVectors Модуль Dos
------------------------------------------------------------
Функция: Меняет местами внутренние векторы.
Описание: SwapVectors
Примечания: Меняет местами содержимое указателей Save-
IntXX в модуле System и текущее содержимое векторов прерыва-
ний. Процедура SwapVectors обычно вызывается непосредственно
перед и непосредственно после вызова Exec. Таким образом
обеспечивается, что выполняемый по вызову Exec процесс не
использует никаких обработчиков претываний, установленных
текущим процессом и наоборот.
Прочее: См. также процедуру Еxec.
Пример:
{$M 8192,0,0}
uses Dos;
var
Command: string[79];
begin
Write('Введите команду ДОС:');
Readln(Command);
if Command <> '' then
Command := '/C' + Command;
Swapvectors;
Exec(GetEnv('COMSPEC'), Command);
SvapVectors;
if DosError <> 0 then
Writeln('Командный файл COMMAND.COM выполнить
нельзя');
end.
------------------------------------------------------------
Процедура TextBackGroud Модуль Сrt
------------------------------------------------------------
Функция: Выбирает фоновый цвет.
Описание: TextBackGroud(цвет : byte)
Примечания: Параметр "цвет" представляет собой выраже-
ние целого типа в диапазоне 0...7, соответствующее одной из
первых восьми констант цветов:
{ Константы фонового и основного цвета }
Black = 0; { черный }
Blue = 1; { синий }
Green = 2; { зеленый }
Cyan = 3; { бирюзовый }
Red = 4; { красный }
Magenta = 5; { малиновый }
Brown = 6; { коричневый }
LightGray = 7; { светло-серый }
В модуле Сrt имеется байтовая переменная ТехtАttr, ко-
торая используется для сохранения текущего видеоатрибута.
Процедура ТехtВackGround устанавливает биты 4-6 этой переме-
ной в соответствии с параметром "цвет". Фоновый цвет для
всех выводимых далее символов будет соответствовать заданно-
му цвету.
Прочее: См. также процедуры TextColor, HighVideo, Norm-
Video, LowVideo.
------------------------------------------------------------
Процедура TextColor Модуль Сrt
------------------------------------------------------------
Функция: Выбирает цвет символа.
Описание: TextColor(цвет : byte)
Примечания: Параметр "цвет" представляет собой выраже-
ние целого типа в диапазоне 0...15, соответствующее одной из
констант цветов, определенных в модуле Сrt:
{ Константы фонового и основного цвета }
Black = 0; { черный }
Blue = 1; { синий }
Green = 2; { зеленый }
Cyan = 3; { бирюзовый }
Red = 4; { красный }
Magenta = 5; { малиновый }
Brown = 6; { коричневый }
LightGray = 7; { светло-серый }
DarkGray = 8; { темно-серый }
LightBlue = 9; { светло-голубой }
LightGreen = 10; { светло-зеленый }
LightCyan = 11; { светло-бирюзовый }
LightRed = 12; { светло-красный }
LightMagenta = 13; { светло-малиновый }
Yellow = 14; { желтый }
White = 15; { белый }
В модуле Сrt имеется байтовая переменная ТехtАttr, ко-
торая используется для сохранения текущего видеоатрибута.
Процедура ТехtВаскGround устанавливает биты 0-3 этой переме-
ной в соответствии с параметром "цвет". Если параметр "цвет"
превыщает значение 15, то устанавливается также бит мерцания
(бит 7), в противном случае он очищается.
Вы можете задать мерцание символов путем прибавления
128 к значению цвета. Для этой цели определена константа
Вlinк. Фактически ради совместимости с версией 3.0 любое
значение цвета, превышающее 15 вызывает мерцание символа.
Цвет всех выводимых далее символов будет соответствовать
указанному цвету.
Отличия: В версии 3.0 константа Вlinк была равна 16.
Прочее: См. также процедуры TextBackGround, High-
Video, NormVideo, LowVideo.
Пример:
TextColor(Green); { выбрать зеленые
символы }
TextColor(LightRed+Blink) { выбрать мерцающие свет-
ло-красные символы }
TextColor(14); { выбрать желтые символы }
------------------------------------------------------------
Функция TextHeight Модуль Graph
------------------------------------------------------------
Функция: Возвращает высоту строки в элементах изображе-
ния.
Описание: ТехtНеight(текст_строка : string)
Тип результата: Слово (word).
Примечания: На основе размера текущего шрифта и коэффи-
циента размера определяет строки, заданной параметром
"текст_строка", в элементах изображения. Это полезно исполь-
зовать для выбора интервала между строками, вычисления высо-
ты области просмотра, определения размера заголовка, чтобы
он поместился в заданном рисунке или в заданную область и
т.д. Например, при испоьзовании шрифта с двоичным образом
8х8 и коэффициента размера 1 (установленных процедурой
SetTextStyle) строка Тurbо будет иметь высоту 8 элементов
изображения.
Очень важно использовать процедуру TextHeight для вы-
числения высоты строк, вместо того, чтобы делать это вруч-
ную. Тогда при выборе различных шрифтов отпадает необходи-
мость изменения текста программы.
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуры OutText, OutTextXY, Set-
TextStyle, TextWidth, SetUserCharSize.
Пример:
uses Graph;
var
Gd, Gm : integer;
Y, Size : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
Y := 0;
for Size := 1 to 5 do
begin
SetTextStyle(DefaultFont, HorizText, Size);
OutTextXY(0, Y, 'Графика Турбо-Паскаля');
Inc(Y, TextWidth('Графика Турбо-Паскаля'));
end;
Readln;
CloseGraph;
end.
------------------------------------------------------------
Процедура TextMode Модуль Сrt
------------------------------------------------------------
Функция: Выбирает указанный текстовый режим.
Описание: ТехtМоdе(режим : integer)
Примечания: Определены следующие константы:
const
{ режимы CRT }
BW40 = 0; { 40х25, черно-белый на цветном
адаптере }
C40 = 1; { 40х25, цветной на цветном адаптере}
BW80 = 2; { 80х25, черно-белый на цветном
адаптере }
C80 = 3; { 80х25, цветной на цветном адаптере}
Mono = 7; { 80х25, черно-белый на одноцветном
адаптере }
Font8x8 = 256; { для адаптеров EGA/VGA (50 строк)}
C40 = C040; { для совместимости с версией 3.0 }
C80 = C080; { для совместимости с версией 3.0 }
При указании других значений процедура ТехtМоdе подра-
зумевает использование С80.
При вызове процедуры ТехtМоdе сбрасывается текущее окно
и в качестве текушего окна рассматривается вся область экра-
на, для DirectVideo устанавливается значение True, для
CheckShow также устанавливается значение Тruе (если был выб-
ран цветной режим) и текущий текстовый атрибут сбрасывается
в нормальное состояние, соответствующее обращению к
процедуре NormVideo, а текущий видеорежим сохраняется в
LastMode. При инициализации программы LastMode получает зна-
чение текущего видеорежима.
Задание TextMode(LastMode) приводит к тому, что вновь
будет выбран последний активный текстовый режим. Эты бывает
полезно в том случае, когда после использование графических
средств (Graph3 или Graph) вы хотите вернуться в текстовый
режим.
Обращение виде:
TextMode(c80 + Font8x8)
приведет к тому, что дисплей будет сброшен в состояние, при
котором используется 43 строки и 80 позиций в строке и гра-
фический адаптер VGA с цветным монитором. Обращение
TextMode(Lo(LastMode)) всегда выключает 43 или 50-строковые
режимы и сбрасывает дисплей (хотя его видеорежим остается
неизмененным), а вызов:
TextMode(lo(LastMode)+Font8x8)
оставит видеорежим тем же самым, но сбросит дисплей в 43 или
50-строковый режим.
Если при загрузке программы не Турбо-Паскале ваша сис-
тема находится в 43 или 50-строковом режеме, этот режим бу-
дет сохранен в части инициализации модуля Crt, и переменная,
в которой отслеживается максимальное число строк на экране
(WindMax) будет инициализирована правильно.
Приведем пример "корректной" программы, которая восста-
навливает видеорежим в исходное состояние.
program Video;
uses Crt;
var
OrigMode : integer;
begin
OrigMode := LastMode; { сохранить исходный режим }
...
TextMode(OrigMode);
end.
Заметим, что процедура TextMode не поддерживает графи-
ческих режимов. Таким образом TextMode(OrigMode) будет вос-
станавливать только те режимы, которые поддерживаются
TextMode.
Отличия: В версии 3.0 вызов процедуры ТехtМоdе без
параметров теперь соответствует обращению ТехtМоdе(Last).
Прочее: См. также процедуру RestoreCrt.
------------------------------------------------------------
Процедура TextWidth Модуль Graph
------------------------------------------------------------
Функция: Возвращает ширину строки в элементах изображе-
ния.
Описание: ТехtWidth(текст_строка : string)
Тип результата: Слово (word).
Примечания: На основе длины строки (в символах), разме-
ра текущего шрифта и коэффициента размера определяет длину
строки, заданной параметром "текст_строка", в элементах
изображения. Это полезно использовать для выбора интервала
между строками, вычисления ширины области просмотра, опреде-
ления размера заголовка, чтобы он поместился в заданном ри-
сунке или в заданную область и т.д. Например, при использо-
вании шрифта с двоичным образом 8х8 и коэффициента размера 1
(установленными процедурой SetTextStyle) строка Тurbо будет
иметь длину 40 элементов изображения.
Очень важно использовать процедуру TextWidth для вычис-
ления ширины строк, вместо того, чтобы делать это вручную.
Тогда при выборе различных шрифтов отпадает необходимость
изменения текста программы.
Ограничения: Должен использоваться графический режим.
Прочее: См. также процедуры OutText, OutTextXY, Set-
TextStyle, TextHeight.
Пример:
uses Graph;
var
Gd, Gm : integer;
Row, Size : integer;
Title : string;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
Row := 0;
Title := 'Turbo Graphics';
Size := 1;
while TextWidth(Title) < WindiwWidth do
begin
OutTextXY(0, Row, Title);
Inc(Row, TextHeight('M'));
Inc(Size);
SetTextStyle(DefaultFont, HorizDir, Size);
end;
Readln
CloseGraph;
end.
------------------------------------------------------------
Функция Trunc
------------------------------------------------------------
Функция: Округляет значение вещественного типа до зна-
чения целого типа.
Описание: Trunc(x : real)
Тип результата: Длинный целый (longint).
Примечания: Параметр x представляет собой выражение ве-
щественного типа. Функция Round возвращает значение длинного
целого типа, которое является значением x, округленным в
сторону нуля.
Ограничения: Если округленное значение x не соответст-
вует диапазону представления длинного целого типа, то проис-
ходит ошибка во время выполнения.
Отличия: В версии 3.0 функция Round возв- ращает целое
значение.
Прочее: См. также функции Round, Int.
------------------------------------------------------------
Процедура Truncate
------------------------------------------------------------
Функция: Усекает размер файла до текущей позиции в фай-
ле.
Описание: Тruncate(f)
Примечания: Параметр f является файловой переменной лю-
бого типа. Все записи после текущей позиции в файле f удаля-
ются и текущая позиция в файле становится концом файла
(функция Еоf(f) принимает значение Тrue).
При указании директивы компилятора {$I-} функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в против-
ном случае.
Ограничения: Файл f должен быть открыт.
См. также процедуры Seek, Reset.
------------------------------------------------------------
Процедура UnpackTime Модуль Dos
------------------------------------------------------------
Функция: Преобразует четырехбайтовое значение, предс-
тавляющее собой упакованный длинный целый тип представления
даты и времени, возвращаемый процедурами GetTime, FindFirst
и FindNext, в распакованную запись DateTime (дата и время)
Описание: UnpackTime(время : longint; var дата : Time :
longint; var DT : DateTime)
Примечания: Запись DateTime описана в модуле Dos следу-
ющим образом:
DateTime = record
Year, Month, Day, Hour,
Min, Sec, : word;
end;
Для полей данной записи не выполняется проверка на пра-
вильность границ.
Прочее: См. также процедуры PackTime, GeFtTime, SetF-
Time, GetTime, SetTime.
------------------------------------------------------------
Функция UpCase
------------------------------------------------------------
Функция: Преобразует символ в прописную букву.
Описание: UpCase(символ : char)
Примечания: Параметр "символ" представляет собой выра-
жение символьного типа. Результатом символьного типа будет
символ, задаваемый параметром "символ", преобразованный в
прописной символ. Значения символов, не лежащие в диапазоне
а...z, остаются без изменений.
------------------------------------------------------------
Процедура Val
------------------------------------------------------------
Функция: Преобразует строковое значение в его численное
представление.
Описание: Val(s : string; v; var код : integer)
Примечания: Параметр s представляет собой выражение
строкового типа. Параметр v является переменной целого или
вещественного типа. Параметр "код" - это переменная целого
типа, которая формирует все число со знаком в соответствии с
синтаксисом, показанном в разделе "Числа" в Главе 1. Функция
Val преобразует строку s в ее численное представление и сох-
раняет результат в v. Если где-либо в строке встречается не-
допустимый символ, то его номер сохраняется в параметре
"код". В противном случае этот параметр равен нулю.
В зависимости от состояния {$R} и типа параметра v
функция Val по-разному выполняет проверку диапазона.
Если состояние проверки диапазона установлено, то есть
задано {$R+}, то выражения, выходящие за границу диапазона,
всегда будут генерировать ошибку времени выполнения.
Если состояние проверки диапазона сброшено, то есть за-
дано {$R-}, то выражения, выходящие за границу диапазона,
будут вызываеть эффект, зависящий от их типа. Если v имеет
тип real или longint, то значение v становится неопределен-
ным и в параметре "код" возвращается ненулевое значение. Для
любого другого числового типа в параметре "код" возвращается
нулевое значение, а v будет содержать результат вычислений с
переполнением (если предположить, что строковое значение по-
падает в диапазон представления длинного целого).
Таким образом, процедуре Val переменную длинного целого
типа (longint) и перед тем, как присваивать полученное зна-
чение, выполнять проверку диапазона. Например:
{$R-}
Val('65536', LongIntVar, Code);
if (Code <>0) or
(LOngIntVar < 0) or (LongIntVar > 65535) then
... { ошибка }
else
WordVar := LongIntVar;
Ограничения: Предшествующие пробелы должны быть удале-
ны.
Прочее: См. также процедуру Str.
Пример:
var
i, code : integer;
begin
{ получить текст из командной строки }
Val(ParamStr(1), i, code);
{ ошибка при преобразовании в целое значение? }
if code <> 0 then
Writeln('Ошибка на позиции :', code);
else
Writeln('Значение = ', i);
end.
------------------------------------------------------------
Функция WhereX Модуль Сrt
------------------------------------------------------------
Функция: Возвращает для текущей позиции курсора относи-
тельно текущего окна координату Х.
Описание: WhereX
Тип результата: Байт (byte).
Прочее: См. также процедуры WhereY, GotoXY, Window.
------------------------------------------------------------
Функция WhereY Модуль Сrt
------------------------------------------------------------
Функция: Возвращает для текущей позиции курсора относи-
тельно текущего окна координату Y.
Описание: WhereY
Тип результата: Байт (byte).
Прочее: См. также процедуры WhereX, GotoXY, Window.
------------------------------------------------------------
Процедура Window Модуль Сrt
------------------------------------------------------
------
Функция: Определяет на экране текстовое окно.
Описание: Window(X1, Y1, X2, Y2)
Примечания: Параметры Х1, Y1 представляют собой коорди-
наты верхнего левого угла окна, параметры Х2, Y2 представля-
ют собой координаты правого нижнего угла. Правый левый угол
экрана соответствует координате (1,1). Минимальный размер
текстового окна - один столбец на одну строку. Если коорди-
наты являются каким-то образом недопустимыми, то обращение к
процедуре Window игнорируется.
В 80-символьных режимах по умолчанию определяется окно
(1,1,80,25), а в 40-символьных режимах - (1,1,40,25), что
соответствует всему экрану.
Все координаты экрана (кроме самих координат окна) яв-
ляются относительными координатами данного окна. Например,
GotoXY(1,1) всегда позиционирует курсор на верхний левый
угол текущего окна.
Многие процедуры и функции модуля Сrt, включая зависят
от текущего окна.
Процедуры WindMin и WindМах сохраняют текущее определе-
ние окна (см. Главу 12).
Пример:
uses Crt;
var
x, y : byte;
begin
TextBackGround(Black); { очистить экран }
ClrScr;
repeat
x := Succ(Random(80)); { нарисовать
случайным
образом окна }
y := Succ(random(25));
Window(x, y, x + Random(10), y + Random(8));
TextBackGround(Random(16)); { использовать
случайные
фоновые цвета }
ClrScr;
until KeyPressed;
end.
------------------------------------------------------------
Процедура Write (типизованные файлы)
------------------------------------------------------------
Функция: Записывает переменную в элемент файла.
Описание: Wite(f, v1 [, v2,...,vn] )
Примечания: Параметр f является файловой переменной, а
каждый элемент v представляет собой переменную того же типа,
что и элемент файла f. При каждой записи переменной текущая
позиция в файле продвигается к следующему элементу. Если те-
кущая позиция файла находится в конце файла (то есть когда
Еоf(f) имеет значение Тruе), то файл расширяется.
При указании директивы компилятора {$I-} функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в против-
ном случае.
Прочее: См. также процедуру Writeln.
------------------------------------------------------------
Процедура Write (текстовые файлы)
------------------------------------------------------------
Функция: Записывает одно или более значений из одной
или более переменных в текстовый файл.
Описание: Write( [var f : text; ] v1 [, v2,...,vn] )
Примечания: Параметр f (если он указан) является файло-
вой переменой, соответствующей текстовому файлу. Если он
опущен, то подразумевается использование стандартной файло-
вой переменной Output. Каждый параметр v является записывае-
мым параметром. Каждый записываемый параметр включает в себя
выводимое выражение, значение которого должно быть записано
в файл. Каждое выводимое выражение должно быть символьного,
целого, вещественного, строкового, упакованого строкового
или булевского типа.
Записываемый параметр имеет вид:
вывод_выраж [ : мин_разм [ : дес_знак ]]
где "вывод_выраж" представляет собой выводимое выражение, а
"мин_разм" и "дес-знак" и являются выражениями целого типа.
"мин_разм" задает минимальную ширину поля, которая должна
быть больше нуля. Если "вывод_выраж" имеет значение, которое
должно быть представлено числом символов, превышающим зада-
ваемое параметром "мин_разм", то записывается ровно столько
символов, сколько определено в параметре "мин_разм" (при не-
обходимости используются лидирующие пробелы). В этом случае,
чтобы представить значение "вывод_выраж", записывается дос-
таточное количество символов. Аналогично, если параметр
"мин_разм" опущен, то для того, чтобы представить значение
"вывод_выраж", записывается достаточное количество символов.
Параметр "дес_знак" задает число десятичных знаков в
представлении вещественного значения с фиксированной запя-
той. Оно может указываться только в том случае, если
"вывод_выраж" имеет вещественный тип, а также указан
параметр "мин_разм". Если параметр "мин_разм" указан, то он
должен быть больше нуля или равен нулю.
Что касается записи символьного значения, то, если
параметр "мин_разм" опущен, в файл записывается символьное
выражение "вывод_выраж".
В противном случае значение параметра "мин_разм" -1 оп-
ределяет запись пробелов и далее символьного значения
"вывод_выраж".
При записи целочисленного значения, если опущен
параметр "мин_разм", то десятичное представление
"вывод_выраж" записывается в файл без предшествующих пробе-
лов. Если параметр "мин_разм" уазывается и его значение пре-
вышает длину десятичной строки, то перед десятичной строкой
записывается количество пробелов, достаточное для того, что-
бы длина десятичной строки соответствовала параметру
"мин_разм".
При записи вещественного значения, в файл записывается
десятичное представление вещественного значения
"вывод_выраж". Формат представления зависит от наличия или
отсутствия параметра "дес_знак".
Если параметр "дес_знак" опущен (или если он присутст-
вует, но имеет отрицательное значение), то записывается де-
сятичная строка с плавающей запятой. Если параметр
"мин_разм" также опущен, то по умолчанию он подразмевается
равным 17. В противном случае, если параметр "мин_разм"
меньше 8, то его значение подразумевается равным 8. десятич-
ная строа с плавающей запятой имеет следующий формат:
[!-] <цифра>.<десят_знаки>Е[+!-<экспонента>]
Элементы выводимой строки приведены в Таблице 16.1.
Элементы выводимой строки Таблица 16.1
------------------------------------------------------------
[!-] Знак, соответствующий знаку "вывод-выраж"
<цифра> Отдельная цифра или ноль (в том случае,
когда "вывод_выраж" равно 0.
<десят-знаки> Цифровая строка длиной "мин_разм"-7 (но не
более 10 цифр).
------------------------------------------------------------
Е Прописной символ [Е].
[+!-] Знак, соответствующий знаку экспоненты.
<экспонента> Десятичная экспонента из двух цифр.
------------------------------------------------------------
Если присутствует параметр "дес_знак", то записывается
десятичная строка с фиксированной запятой. Если значение
данного параметра превышает 20, то оно считается равным 20.
Строка с фиксированной запятой имеет следующий формат:
[<пробелы>][-]<цифры>[.<десят_знаки>]
Элементы строки с фиксировынной запятой приведены в
Таблице 16.2.
Элементы строки с фиксированной запятой Таблица 16.2
------------------------------------------------------------
[.<пробелы>] Пробелы (чтобы длины строки соответствова-
ла параметру "мин_разм".
[-] Знак -, если "вывод_выраж" отрицательно.
<цифры> По крайней мере одна цифра. Лидирующие ну-
ли не допускаются.
<.десят_знаки> Десятичные знаки, если параметр "дес_знак"
больше нуля.
------------------------------------------------------------
Запись значения строкового типа производится следующим
образом. Если параметр "мин_разм" опущен, то в файл записы-
вается строковое значение "вывод_выраж", а предшествующие
пробелы отсутствуют. Если указан параметр "мин_разм" и его
значение превышает длину "вывод_выраж", то перед десятичной
строкой для того, чтобы ее длина соответствовала параметру
"мин_разм", записывается достаточное количество пробелов.
При записи значения упакованного строкового типа, эф-
фект будет тем же самым, что и при записи строки, длина ко-
торой соответствует числу элементов в выражении упакованного
строкового типа.
При записи булевского значения выполняются такие же
действия, как при записи строк Тruе или False, в зависимости
от значения "вывод_выраж".
При указании директивы компилятора {$I-} функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в против-
ном случае.
Ограничения: Файл должен быть открыт для вывода.
Отличия: См. Приложение А "Руководства пользователя",
где описываются различия между версиями 3.0, 4.0 и 5.0 Тур-
бо-Паскаля.
Прочее: См. также процедуру Writeln.
------------------------------------------------------------
Процедура Writeln
------------------------------------------------------------
Функция: Выполняет процедуру Write, а затем записывает
в файл метку конца строки.
Описание: Writeln( [ var f : text; ] v1, [, v2,...,vn])
Примечания: Данная процедура является расширением про-
цедуры Write для текстовых файлов. После выполнения процеду-
ры Write процедура Writeln записывает метку конца строки
(возврат каретки / перевод строки).
При вызове данной процедуры без параметров (Write(f)),
в файл записывается метка конца строки. (Процедура Writeln
без указания списка параметров полностью соответствует
процедуре Writeln(Output)).
Ограничения: Файл должен быть открыт для вывода.
Отличия: См. Приложение А "Руководства пользователя",
где описываются различия между версиями 3.0, 4.0 и 5.0 Тур-
бо-Паскаля.
Прочее: См. также процедуру Write.
|