ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 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. |