П4. СТАНДАРТНЫЕ БИБЛИОТЕЧНЫЕ МОДУЛИ 

П4.1. МОДУЛЬ SYSTEM

Модуль SYSTEM является основной библиотекой Турбо Паскаля. Он реализует подпрограммы для всех встроенных возможностей, таких как ввод/вывод, обработка строк, эмуляция арифметического сопроцессора, управление оверлеями и динамическое распределение памяти. Модуль SYSTEM используется автоматически любым модулем или программой и никогда не указывается в предложении USES.

П4.1.1. Константы

const

     

ErrorAddr

Pointer

=

NIL;{Адрес ошибки времени выполнения}

ExitProc

Pointer

=

NIL;{Процедура выхода}

ExitCode

Integer

=

0;{Выходной код}

FileMode

Byte

=

2;{Режим открытия файла}

FreeList

Pointer

=

NIL;{Список свободных блоков кучи}

HeapEnd

Pointer

=

NIL;{Конец кучи}

HeapError

Pointer

=

NIL;{Функция обработки ошибок кучи}

HeapOrg

Pointer

=

NIL;{Начало кучи}

HeapPtr

Pointer

=

NIL;{Указатель кучи}

InOutRes

Integer

=

0;{Буфер результата ввода/вывода}

OvrCodeList

Word

=

0;{Список оверлейных сегментов кода}

OvrDebugPtr

Pointer

=

NIL;{Адрес отладчика оверлеев}

OvrDosHandle

Word

=

0;{Обработчик DOS оверлеев}

OvrEmsHandle

Word

=

0;{Обработчик EMS оверлеев}

OvrHeapEnd

Word

=

0;{Конец буфера оверлеев}

OvrHeapOrg

Word

=

0;{Начало буфера оверлеев}

OvrHeapPrt

Word

=

0;{Указатель буфера оверлеев}

OvrHeapSize

Word

=

0;{Начальный размер буфера оверлеев}

OvrLoadList

Word

=

0;{Список загруженных оверлеев}

RandSeed

LongInt

=

0;{Опорное значение генератора случайных чисел}

PrefixSeg

Word

=

0;{Префикс программного сегмента}

Seg0040

Word

=

$0040{Сегмент $0040}

SegA000

Word

=

$A000{Сегмент $А000}

SegB000

Word

=

$B000{Сегмент $В000}

SegB800

Word

=

$B800{Сегмент $В800}

SelectorInc

Word

=

$1000{Шаг наращивания селекторов}

StackLimit

Word

=

0;{Указатель на нижнюю границу стека}

Test8086

Byte

=

0;{Признак наличия процессора 80x86}

Test8087

Byte

=

0;{Признак наличия сопроцессора}

OvrCodeList, OvrHeapSize, OvrDebugPtr, OvrHeapOrg, OvrHeapPtr, OvrHeapEnd, OvrHeapList, OvrDosHandle и OvrEmsHandle используются модулем Overlay для реализации администратора оверлеев. Буфер оверлеев размещается между сегментом стека и кучей и OvrHeapOrg и OvrHeapEnd содержат адреса начала и конца сегмента. Размер буфера оверлеев по умолчанию соответствует размеру максимального оверлея в программе; если в программе нет оверлеев, то размер оверлейного буфера равен нулю.

HeapOrg, HeapPtr, HeapEnd, FreeList, HeapError используются администратором кучи для реализации распределения динамической памяти.

Переменные ExitProc, ExitCode и ErrorAddr реализуют процедуры выхода.

PrefixSeg содержит сегментную часть адреса префикса программного сегмента (PSP).

StackLimit содержит смещение от нижней границы сегмента стека, соответствующее наименьшему допустимому значению регистра SP. Обычно StackLimit равен нулю; если программа откомпилирована с опциями {$N+.E+}, компилятор будет устанавливать его равным 224 для резервирования рабочего пространства на нижней границе сегмента стека, используемого для эмуляции сопроцессора.

InOutRes используется встроенными программами ввода/вывода для запоминания значения, возвращаемого при последующем вызове стандартной функции IOResult.

RandSeed содержит опорное число генератора случайных чисел. При присваивании конкретного значения этой переменной функция Random будет генерировать строго определенную последовательность псевдослучайных чисел. Процедура Randomize заносит в переменную RandSeed текущее системное время и тем самым обеспечивает новую псевдослучайную последовательность при очередном прогоне программы.

FileMode позволяет изменить режим доступа, с которым открываются типизированные и нетипизированные файлы стандартной процедурой RESET. Текстовые файлы этой процедурой открываются только для чтения.

Seg0040 хранит сегмент участка памяти, который MS-DOS использует для размещения своих переменных.

SegA000 содержит сегмент начала видеопамяти для графического режима работы, a SegB000 и SegB800 -сегменты видеопамяти для текстового режима.

Selectorlnc используется как шаг наращивания т.н. селекторов - указателей, обеспечивающих линейную модель памяти.

Test8086 хранит результат теста автообнаружения процессора Intel 80x86, a Test8087 - сопроцессора.

П4.1.2. Переменные

var

Input : Text;{Стандартный файл ввода} 

Output : Text;{Стандартный файл вывода} 

SaveInt00: Pointer;{Сохранение вектора $00}

.....

SaveInt75: Pointer;{Сохранение вектора $75}

Input и Output - стандартные файлы, необходимые в каждой реализации языка Паскаль. По умолчанию они ссылаются на стандартные входные и выходные файлы ДОС: Input - на клавиатуру, Output - на экран.

В момент загрузки среда Турбо Паскаля изменяет значения 18 векторов прерывания (векторы $00, $02, $1N, $21, $23, $24, $35, $36, $37, $38, $39, $ЗА, $ЗВ, $ЗС, $3D, $3E, $3F и $75). В переменных SaveIntXX сохраняются старые значения этих векторов (XX - номер вектора: SavelntOO - для вектора $00, SaveIntlB - для вектора $1В и т.д.).

П4.1.3. Стандартные процедуры и функции

Процедуры управления

Procedure Break Обеспечивает немедленный выход из операторов повторения. 

Procedure Continue Завершает очередной итерационный цикл операторов повторения.

Procedure Exit Позволяет немедленно выйти из текущей подпрограммы. При вызове из тела основной программы завершает ее работу.

Procedure Halt [ (ExitCode: Word)] Останавливает выполнение программы и возвращает управление в операционную систему. Необязательный параметр ExitCode определяет код завершения программы.

Procedure RunError [ (ErrorCode: Byte)] Останавливает выполнение программы и генерирует ошибку периода выполнения программы. Необязательный параметр ErrorCode определяет код ошибки.

Процедуры динамического распределения памяти

Procedure Dispose(var P: Pointer [,Destructor]) Уничтожает динамическую переменную, связанную с указателем Р. Необязательный параметр Destructor определяет метод-деструктор для динамического объекта.

Procedure FreeMem(var P: Pointer; Size: Word) Уничтожает динамическую переменную P размером Size байт.

Procedure GetMemtvar Р: Pointer; Size: Word) Создает новую динамическую переменную Р заданного размера Size.

Procedure Mark(var P: Pointer) Записывает в указателе Р текущее состояние кучи.

Procedure New(var P; Pointer [,Constructor]) Создает новую динамическую переменную, связанную с указателем Р. Необязательный параметр Constructor определяет метод-конструктор для динамического объекта.

Procedure Release (var P: Pointer) Возвращает кучу в состояние, которое было сохранено в указателе Р процедурой Mark.

Функции динамического распределения памяти

Function MaxAvail: LongInt Возвращает размер наибольшего непрерывного свободного блока кучи, соответствующий размеру наибольшей динамической переменной, которая может быть помещена в кучу.

Function MemAvail; LongInt Возвращает количество имеющихся в куче свободных байт памяти.

Функции преобразования

Процедуры Pack и UnPack, определенные в стандартном Паскале, в Турбо Паскале не реализованы. Function Chr(X: Byte): Char Возвращает символ с заданным порядковым номером X.

Function Ord(X) : LongInt Возвращает порядковый номер, соответствующий значению X порядкового типа.

Function Round (R: Real) : LongInt Округляет значение R вещественного типа до ближайшего целого.

Function Trunc(R: Real): LpngInt Усекает значение вещественного типа до значения типа LongInt путем отбрасывания дробной части.

Арифметические функции

При компиляции в режиме использования сопроцессора или его эмуляции арифметические функции возвращают значение типа EXTENDED, в противном случае - типа REAL.

Function Abs(R; Real): Real Возвращает абсолютное значение аргумента.

Function ArcTan(R: Real): Real Возвращает арктангенс аргумента.

Function Cos(R: Real): Real Возвращает косинус аргумента.

Function Exp(R; Real): Real Возвращает экспоненту аргумента.

Function Frac(R; Real): Real Возвращает дробную часть аргумента.

Function Int(R; Real): Real Возвращает целую часть аргумента.

Function Ln(R: Real) : Real Возвращает натуральный логарифм аргумента.

Function Pi: Real Возвращает значение числа pi=3.1415926535897932385.

Function Sin(R: Real): Real Возвращает синус аргумента.

Function Sqr(R: Real): Real Возвращает аргумент в квадрате.

Function Sqrt(R; Real): Real Возвращает квадратный корень аргумента.

Процедуры порядкового типа

Procedure Dec (var X [; DX: LongInt] ) Уменьшает значение переменной X на величину DX, а если параметр DX не задан - на 1.

Procedure Inc (var X [; DX: LongInt]) Увеличивает значение переменной X на величину DX, а если параметр DX не задан - на 1.

Функции порядкового типа

Function Odd(X) : Boolean Проверяет, является ли аргумент нечетным числом.

Function Pred(X) Возвращает предшествующее значение аргумента. Тип результата совпадает с типом аргумента.

Function Succ(X) Возвращает последующее значение аргумента. Тип результата совпадает с типом аргумента.

Строковые процедуры

Procedure Delete (var S: String; Index, Count: Integer) Удаляет Count символов из строки S, начиная с позиции Index.

Procedure Insert (SubS: String; var S: String; Index: Integer) Вставляет подстроку SubS в строку 5, начиная с позиции Index.

Procedure Str(X [: width [: Decimals]]; var S: String) Преобразует численное значение X в его строковое представление S.

Procedure Val(S; String; var X; var Code: Integer) Преобразует строковое значение S в его численное представление X. Параметр Code -содержит признак ошибки преобразования (0 - нет ошибки).

Строковые функции

Function Concat(S1 [, S2,...,SN]): String Выполняет конкатенацию последовательности строк.

Function Copy(S: String; Index, Count: Integer): String Возвращает подстроку из строки S, начиная с позиции Index и длиной Count символов.

Function Length(S: String): Byte Возвращает текущую длину строки S.

Function Pos(SubS, S: String): Byte Возвращает позицию, начиная с которой в строке S располагается подстрока SubS (О - S не содержит SubS).

Функции для работы с указателями и адресами

Function Addr (X) : Pointer Возвращает адрес заданного объекта X.

Function Assigned: (var P) : Boolean Проверяет, хранит ли ли указатель Р значение, отличное от NIL, и возвращает TRUE в этом случае.

Function CSeg: Word Возвращает текущее значение регистра CS. Function DSeg: Word Возвращает текущее значение регистра DS. Function Of s (X) ; Word Возвращает смещение заданного объекта.

Function Ptr(Seg, 0£s: Word): Pointer Преобразует сегмент Seg и смещение Ofs в значение типа указатель.

Function Seg (X) : Word Возвращает сегмент для заданного объекта X.

Function SPtr: Word Возвращает текущее значение регистра SP.

Function SSeg: Word Возвращает текущее значение регистра SS.

Процедуры разного назначения

Procedure Exclude (var S: set of Т; I: T) Исключает элемент T из множества S.

Procedure FillChar(var X; Count: Word; Value) Заполняет заданное количество Count последовательных байт переменной X указанным значением Value (выражение любого порядкового типа).

Procedure Include (var S: set of Т; I; T) Включает элемент T во множество 5.

Procedure Move (var X, Y,- Count: Word) Копирует заданное количество последовательных байт из источника X в переменную Г.

Procedure Randomize Инициализирует случайным значением (текущим системным временем) встроенный генератор псевдослучайных чисел.

Функции разного назначения

Function Hi(X; Word) : Byte Возвращает старший байт аргумента X. Function High (X) Возвращает максимальное значение порядкового типа. Function Lo(X: Word): Byte Возвращает младший байт аргумента X. Function Low(X) Возвращает минимальное значение порядкового типа.

Function ParamCount: Word Возвращает число параметров, переданных программе в командной строке (строке вызова).

Function ParamStr(N; Byte): String Возвращает N-ый параметр командной строки.

Function Random [ (Range: Word)] Возвращает псевдослучайное число. Если параметр Range опущен, функция возвращает вещественное число в диапазоне от 0 до 1, если указан - целое число в диапазоне от 0 до Range-1.

Function SizeOf(X): Word Возвращает число байт, занимаемых аргументом.

Function Swap(X) Производит перестановку старших и младших байт двухбайтного аргумента X. Тип функции соответствует типу аргумента.

Function UpCase(C: char): Char Преобразует латинскую букву в заглавную.

Процедуры ввода/вывода

Procedure Assign (var F; Name: String) Связывает внешний файл Name с файловой переменной F.

Procedure ChDir(S: String) Устанавливает текущий каталог. 

Procedure Close (var F) Закрывает открытый файл. 

Procedure Erase (var F) Удаляет внешний файл.

Procedure GetDir(D: Byte; var S: String) Возвращает каталог по умолчанию S на заданном диске D.

Procedure MkDirtS: String) Создает подкаталог S.

Procedure Rename (var F) Переименовывает внешний файл.

Procedure Reset (var F) Открывает существующий файл для чтения или изменения.

Procedure Rewrite (var F) Создает и открывает новый файл.

Procedure RmDir(S: String) Удаляет пустой подкаталог.

Procedure Seek (var F; N: LongInt) Устанавливает текущую позицию файла на указанный элемент (не используется с текстовыми файлами).

Procedure Truncate (var F) Усекает размер файла до текущей позиции в файле (не используется с текстовыми файлами)

Функции ввода/вывода

Function EOF (var F) ; Boolean Возвращает для файла F признак конца файла.

Function FilePos (var F) : LongInt Возвращает текущую позицию в файле (не используется с текстовыми файлами)

Function FileSize(var F) : LongInt Возвращает текущий размер файла (не используется с текстовыми файлами).

Function IQResult; Integer Возвращает целое значение, являющееся состоянием последней выполненной операции ввода/вывода.

Процедуры для текстовых файлов

Procedure Append (var F: Text) Открывает существующий файл для расширения. 

Procedure Flush (var F: Text) Выталкивает буфер файла вывода.

Procedure Read ([var F: Text;] V1 [, V2,...,VN]) Считывает одно или более значений из текстового файла в одну или более переменных.

Procedure Readln Выполняет те же действия, что и Read, а потом делает пропуск до начала следующей строки файла.

Procedure SetTextBuf (var F: Text; var Buf [; Size: Word]) Назначает буфер ввода/вывода для текстового файла. Параметр Size определяет длину буфера в байтах (если Size опущен, длина буфера равна 128 байтам).

Procedure Write([var F: Text;] V1 [, V2,...,VN]) Записывает в текстовый файл одно или более значений.

Procedure WriteLn Выполняет те же действия, что и Write, а затем добавляет к файлу маркер конца строки.

Функции для текстовых файлов

Function Eolntvar F: Text): Boolean Возвращает признак конца строки.

Function SeekEof [ (var F: Text)]: Boolean Возвращает признак конца файла. Предварительно пропускает все пробелы, символы табуляции и признаки конца строк.

Function SeekEoln [ (var F: Text)]: Boolean Возвращает признак конца строки. В отличие от Eoln предварительно пропускает все пробелы и символы табуляции.

Процедуры для нетипизированных файлов

Procedure BlockRead(var F: File; var Buf; Count; Word [;var Result; Word]) Считывает в переменную Buf Count записей из файла F. Необязательный параметр Result содержит истинное количество считанных записей.

Procedure BlockWrite(var F; File; var Buf; Count: Word [;var Result: Word]) Передает Count записей из переменной Bufe файл F. Необязательный параметр Result содержит истинное количество переданных записей.

П4.2. МОДУЛЬ DOS

Модуль Dos реализует ряд очень полезных программ операционной системы и обработки файлов. Ни одна из программ модуля Dos не определена в стандартом Паскале и поэтому они размещены в собственном модуле.

П4.2.1. Константы

Константы регистра флагов

Следующие константы используются для проверки отдельных битов флага в регистре Flags после вызова Intr или MSDOS:

const

FCarry= $0001;   FAuxiliary = $0010; FSign = $0080; 

FParity= $0004;  FZero = $0040;      FOverFlow = $0800;

Константы режима доступа к файлу

const

fmClosed =$D7BO; {Маска режима файл закрыт}

fmInput =$D7B1; {Маска режима открыт для чтения} 

fmOutput =$D7B2; {Маска режима открыт для записи}

fmInOut =$D7B3; {Маска режима открыт для чтения и записи}

Константы атрибутов файла

const

Readonly = $01;{Маска только для чтения}

Hidden = $02;{Маска скрытого файла}

SysFile = $04;{Маска системного файла} 

VolumelD = $08;{Маска заголовка тома} 

Directory= $10;{Маска каталога}

Archive = $20;{Маска архивного, файла} 

AnyFile = $3F;{Маска любого файла}

П4.2.2. Типы

type

{Типизированные и нетипизированные файлы} 

FileRec = record 

Handle : Word; 

Mode : Word; 

RecSize : Word;

Private : array [1..6] of Byte; 

UserData : array [1..16] of Byte;

Name : array [0..79] of Char;

end ;

{Текстовые файлы} 

TextBuf = array [0..127] of Char;

TextRec = record

Handle

Word;

Mode

Word;

BufSize

Word;

Private

Word;

BufPos

Word;

BufEnd

Word;

BufPtr

^TextBuf ;

OpenFunc

Pointer;

InOutFunc

Pointer;

FlushFunc

Pointer;

CloseFunc

Pointer;

UserData

array [1..16] of Byte;

Name

array [0..79] of Char;

Buffer

TextBuf ;

end;

 

Registers = record 

case Integer of

0: (AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags: Word);

1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte); 

end;

DataTime = record

Year, Month, Day, Hour, Min, Sec: Integer; 

end;

SearchRec = record

File: array [1..21] of Byte;

Attr: Byte;

Time: Longlnt;

Size: Longlnt;

Name: String [12] ;

end;

DirStr = String [67];{Диск и каталог}

NarneStr = String [8] ;{Имя файла}

ExtStr = String [4];{Расширение файла}

ComStr = String [127] ;{Командная строка}

PathStr = String [79];{Полный маршрут поиска файла}

П4.2.3. Переменные

var

DosError : Integer; 

Значение, запомненное в DosError, представляет собой код ошибки операционной системы:

0 - нет ошибки

2 - файл не найден

3 - путь не найден

5 - доступ запрещен

6 - неверный обработчик

8 - нет памяти

10 - неправильная среда

11 - неправильный формат 

18 - больше нет файлов

П4.2.4. Процедуры и функции

Процедуры даты и времени

Procedure GetDate (var Year, Month, Day, DayOfWeek: Word) Возвращает текущую дату.

Procedure GetFTime (var F; var Time: Longlnt) Возвращает дату и время последнего обновления файла.

Procedure GetTime(var Hour, Minute, Second, Sec100: Word) Возвращает текущее время.

Procedure PackTime(var Pack: DataTime; var Time; Longlnt) Преобразует запись Pack в,4-байтовое упакованное значение даты и времени типа Longlnt, используемое процедурой SetFTime. Поля записи DateTime не проверяются на диапазон.

Procedure SetData (Year, Month, Day: Word) Устанавливает текущую дату.

Procedure SetFTime (var F; Time; Longlnt) Устанавливает время и дату последнего обновления файла.

Procedure SetTime(Hour, Minute, Second, SeclOO: Word) Устанавливает текущее время.

Procedure UnpackTime(Time: Longlnt; var Pack: DataTime) Преобразует 4-байтовое упакованное значение даты и времени, возвращаемое GetFTime, FindFirst или FindNext, в распакованную запись типа DateTime.

Процедуры обслуживания прерываний

Procedure GetIntyec (IntNo: Byte; var Vec: Pointer) Возвращает адрес, хранящийся в указанном векторе прерывания.

Procedure Intr (IntNo; Byte; var R: Registers) Выполняет указанное программное прерывание.

Procedure MSDos (var R: Registers) Выполняет функцию операционной системы.

Procedure SetIntVec (IntNo: byte; P: Pointer) Устанавливает адрес для указанного вектора прерывания.

Функции статуса диска

Function DiskFree(Disk: Word): LongInt Возвращает число свободных байт на указанном диске;

Function DiskSize(Disk: Word): LongInt Возвращает полный объем указанного диска в байтах

Процедуры обработки файлов

Procedure FindFirst(Path: String; Attr: Byte; var Search: SearchRec) Ищет в указанном или текущем каталоге первый файл, соответствующий заданному имени файла и набору атрибутов.

Procedure FindNext (var Search: SearchRec) Возвращает следующий файл, соответствующий имени и атрибутам, указанным в предыдущем вызове FindFrst.

Procedure GetFAttrtvar F; var Attr; Byte) Возвращает атрибуты файла. 

Procedure SetFAttr (var F; Attr: Byte) Устанавливает атрибуты файла.

Procedure FSplit(Path: PathStr; var Dir: DirStr; var Name: NameStr; var Ext: ExtStr) Разбивает имя файла Path на 3 составные части (каталог, имя файла, расширение).

Функции обработки файла

Function FExpand(Name; PathStr) : PathStr Берет имя файла Name и возвращает полное имя файла (устройство, каталог, имя и расширение).

Function FSearch(Name: PathStr; DirList; String): PathStr Ищет файл Name в списке DirList каталогов. Элементы списка разделяются точкой с запятой.

Процедуры обработки процессов

Procedure Exec(Name: PathStr; CmdLine: String) Выполняет заданную программу Name с указанной командной строкой CmdLine.

Procedure Keep (Code: Word) Завершает программу и оставляет ее резидентной в памяти.

Procedure SwapVectors Обменивает сохраненные векторы прерываний из переменных SaveIntXX c текущими векторами.

Функции управления программой

Function DosExitCode: Word Возвращает код завершения подпроцесса.

Функции управления средой

Function EnvCount: Integer Возвращает число переменных окружения, содержащихся в среде ДОС. 

Function EnvStr (Index: Integer): String Возвращает указанную переменную окружения ДОС.

Function GetEnv(EnvVar: String): String Возвращает значение указанной переменной окружения ДОС.

Дополнительные процедуры

Procedure GetCBreak (var CBreak: Boolean) Возвращает состояние проверки Ctrl-Break. 

Procedure SetCBreak(CBreak: Boolean) Устанавливает состояние проверки Ctrl-Break в ДОС. 

Procedure GetVerify(var Verify: Boolean) Возвращает состояние флага верификации в ДОС. 

Procedure SetVerifу (Verify: Boolean) Устанавливает состояние флага верификации в ДОС.

Дополнительные функции

Function DosVersion: Word Возвращает номер версии ДОС.

П4.3. МОДУЛЬ CRT

Модуль Сrt содержит подпрограммы управления текстовым выводом на экран дисплея, звуковым генератором и чтения клавиатуры.

В режиме текстового вывода используются следующие координаты экрана: левый верхний угол экрана имеет координаты 1,1; горизонтальная координата возрастает слева направо, вертикальная - сверху вниз. Если на экране определено окно, все координаты определяются относительно границ окна. Исключением являются координаты процедуры Window установки границ окна, которые всегда задаются относительно границ экрана.

Для чтения клавиатуры используются две функции - KeyPressed и ReadKey. Функция KeyPressed определяет факт нажатия на любую клавишу и не приостанавливает дальнейшее исполнение программы. Функция

KeyPressed читает расширенный код нажатой клавиши. Если к моменту обращения к функции не была нажата ни одна клавиша, программа приостанавливает свою работу, ожидая действий пользователя.

Управление звуковым генератором строится по схеме Sound - Delay - NoSound. Процедура Sound включает звуковой генератор и заставляет его непрерывно генерировать звук нужного тона. Процедура Delay приостанавливает работу программы на заданное число миллисекунд реального времени. Процедура NtfSound отключает звуковой генератор.

П4.3.1. Константы

Константы режима работы

const

   

BW40

=

0;{Черно-белый, 40 символов, 25 строк}

BW80

=

2;{Черно-белый, 80 х 25}

Mono

=

7;{Монохромный, 80 х 25}

С040

=

1;{Цветной, 40 х 25}

С080

=

3;{Цветной, 80 х 25}

Font8x8

=

256;{Для EGA/VGA режим 43 или 50 строк}

С40

=

C040;{Для совместимости с версией 3.0}

С80

=

C080;{Для совместимости с версией 3.0}

Константы цветов

const

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;{Белый}

Blink = 128;{Мерцание символа}

П4.3.2. Переменные

var

CheckBreak:Boolean;{Разрешает/запрещает контроль Ctrl-Break}

CheckEof:Boolean; {Разрешает/запрещает контроль Ctrl-Z}

CheckSnow:Boolean {Разрешает/запрещает контроль "снега"}

Directvideo:Boolean; {Разрешает/запрещает прямой доступ к видеопамяти}

LastMode:Word; {Хранит последний текстовый режим}

TextAttr:Byte; {Хранит текущий байт атрибутов}

WindMin:Word; {Координаты левого верхнего угла текущего окна} .

WindMax:Word; {Координаты правого нижнего угла}

П4.3.3. Процедуры и функции

Функции

Function KeyPressed; Boolean Возвращает True, если на клавиатуре была нажата клавиша, и False в противном случае. Не задерживает исполнение программы.

Function ReadKey: char Читает символ с клавиатуры без эхоповтора на экране. Приостанавливает исполнение программы до нажатия на любую клавишу, кроме Shift, Ctrl, Alt, CapsLock, NumLock, ScrollLock.

Function WhereX: Byte Возвращает горизонтальную координату текущей позиции курсора относительно текущего окна.

Function WhereY: Byte Возвращает вертикальную координату текущей позиции курсора относительно текущего окна.

Процедуры

Procedure AssignCrt (var F: Text) Связывает с файловой переменной устройство CON (клавиатуру для ввода и экран для вывода).

Procedure ClrEol Удаляет все символы от текущей позиции курсора до конца строки без перемещения курсора.

Procedure ClrScr Очищает экран (окно) и помещает курсор в верхний левый угол.

Procedure Delay (D: word) Приостанавливает работу программы на указанное число D миллисекунд.

Procedure DelLine Удаляет строку, на которой находится курсор, и перемещает все строки ниже этой строки на строку вверх. Нижняя строка очищается.

Procedure GotoXY(X, Y; Byte) Перемещает курсор в нужное место экрана (окна). 

Procedure Highvideo Устанавливает высокую яркость символов. 

Procedure InsLine Вставляет пустую строку в позицию курсора. , 

Procedure LowVideo Устанавливает низкую яркость символов. 

Procedure NormVideo Устанавливает нормальную яркость символов. 

Procedure NoSound Выключает звуковой генератор.

Procedure Sound (F: word) Включает звуковой генератор. F - частота звука (Гц). 

Procedure TextBackground (Color: Byte) Устанавливает цвет фона. 

Procedure TextColor (Color: Byte) Устанавливает цвет символов. 

Procedure TextMode (Mode: Word) Устанавливает нужный текстовый режим.

Procedure Window(X1, Y1, X2, Y2 : Byte) Определяет текстовое окно на экране. X1, Y1 - координаты левого верхнего угла, Х2, Y2 - правого нижнего угла.

П4.4. МОДУЛЬ GRAPH

Модуль Graph представляет собой мощную библиотеку графических подпрограмм универсального назначения, рассчитанную на работу с наиболее распространенными графическими адаптерами IBM-совместимых ПК. Подпрограммы модуля Graph обеспечивают различные режимы работы многорежимных адаптеров, полностью используют их цветовые возможности и разрешающую способность.

При исполнении графических программ требуется автономный драйвер графического адаптера (BGI-файл). Если программа использует штриховые шрифты, то кроме того нужен один или несколько шрифтовых файлов (CHR-файлы). При необходимости драйвер и шрифты могут быть включены в тело программы еще на этапе компиляции.

Графические драйверы поддерживают следующие графические адаптеры (и полностью совместимые с ними):

CGA

Hercules

MCGA

AT&T 400

EGA

3270 PC

VGA

IBM-8514

Для поддержки этих аппаратных средств используются следующие драйверы:

CGA.BGI

Драйвер для CGA, MCGA

EGAVGA.BGI

Драйвер для EGA, VGA

HERC . BGI

Драйвер для монохромного Hercules

ATT . BGI

Драйвер для AT&T 6300 (400 строк)

PC3270.BGI

Драйвер для IBM 3270 PC

IBM8514.BGI

Драйвер для IBM 8514

Во время выполнения программы процедура InitGraph автоматически распознает графический адаптер, установленный на ПК, загружает и инициализирует соответствующий графический драйвер, переводит адаптер в графический режим и возвращает управление вызывающей программе. Процедура CloseGraph выгружает драйвер из памяти и восстанавливает текстовый режим работы адаптера.

Подпрограммы модуля Graph позволяют адресоваться к любому элементу (пикселю) растрового графического экрана и управлять светимостью этого элемента. Для указания пикселя используется следующая система координат: верхний левый угол графического экрана имеет координаты 0,0; горизонтальная координата X увеличивается слева направо, вертикальная координата У увеличивается сверху вниз. Например, в режиме 640x480 (адаптер VGA) правый нижний угол экрана имеет координаты 639, 479, а центр экрана -координаты 319,239.

Некоторые графические подпрограммы используют понятие текущего указателя. Указатель содержит координаты того пикселя, начиная с которого будет строиться изображение подпрограммами LineTo, LineRel, OutText и др. В этом смысле указатель подобен текстовому курсору, но, в отличие от него, не имеет видимого изображения на экране.

Для вывода текстовых сообщений на графический экран модуль Graph предоставляет один матричный и 4 штриховых шрифтов. Каждый символ матричного шрифта на экране реализуется в виде матрицы из 8x8 пикселей. Штриховые шрифты для каждого символа определяют набор штрихов (векторов), с помощью которых на экране создается (вычерчивается) соответствующий символ. Штриховые шрифты позволяют изменять размеры текстовых надписей в широких пределах без существенного ухудшения качества изображения символов. Однако стандартные штриховые шрифты не содержат символы кириллицы.

В модуле Graph имеется несколько процедур для рисования элементарных графических фигур - точек, линий, окружностей, дуг и т.п. При необходимости замкнутые фигуры могут быть закрашены различными цветами и стилями (образцами закраски).

Процедура SetViewPort создает на экране графическое окно. Если окно определено, весь дальнейший графический вывод осуществляется относительно координат этого окна и отсекается его границами.

В модуле имеются средства сохранения и выдачи изображений, работы с несколькими графическими страницами, установки необходимых цветов.

П4.4.1. Константы

Константы задания драйверов и режимов работы

const

     

Detect =

0;

   

CGA =

1;

   

MCGA =

2;

   

EGA =

3;

   

EGA64 =

4;

   

EGAMono =

5;

   

IBM8514 =

6;

   

HercMono =

7;

   

ATT400 =

8;

   

VGA =

9;

   

PC3270 =

10;

   

CurrentDriver = -128 ;

{Передается в GetModeRange}

CGAC0 = 0;

{320x200;

палитра 0; 1

страница }

CGAC1 = 1;

{320x200;

палитра 1 ; 1

страница }

CGAC2 = 2;

{320x200;

палитра 2 ; 1

страница }

CGAC3 = 3;

{320x200;

палитра 3; 1

страница }

CGAHi = 4;

{640x200;

1 страница }

 

MCGAC0 = 0;

{320x200; палитра О; 1 страница}

MCGAC1 = 1;

{320x200; палитра 1; 1 страница}

MCGAC2 = 2;

{320x200; палитра 2; 1 страница}

MCGAC3 = 3;

{320x200; палитра 3; 1 страница}

MCGAMed = 4;

{640x200; 1 страница}

MCGAHi = 5;

{640x480; 1 страница}

EGALo = 0;

{640x200; 16 цветов; 4 страницы}

EGAHi = 1;

{640x350; 16 цветов; 2 страницы}

EGA64LO = 0;

{640x200; 16 цветов; 1 страница}

EGA64Hi = 1;

{640x350; 4 цвета; 1 страница}

EGAMonoHi= 3;

{640x350; 64К: 1 страница;256К:2 страницы}

HercMonoHi=0;

{720x348; 2 страницы}

ATT400CO = 0;

{320x200; палитра 0; 1 страница}

ATT400C1 = 1;

{320x200; палитра 1; 1 страница}

ATT400C2 = 2;

{320x200; палитра 2; 1 страница}

ATT400C3 = 3;

{320x200; палитра 3; 1 страница}

ATT400Med= 4;

{640x200; 1 страница}

ATT4QOHi = 5;

{640x400; 1 страница}

VGALo = 0;

{640x200; 16 цветов; 4 страницы}

VGAMed = 1;

{640x350; 16 цветов; 2 страницы}

VGAHi = 2;

{640x480; 16 цветов; 1 страница}

PC3270Hi = 0;

{720x350; 1 страница}

IBM8514LO= 0;

{640x480; 256 цветов}

IBM8514HI= 1;

{1024x768; 256 цветов}

Значения ошибок, возвращаемые GraphResult

const

grOk = 0;{Нет ошибок} 

grNoInitGraph = -1;{Графика не инициализирована} 

grNotDetected = -2;{Графическое устройство не обнаружено} 

grFileNotFound = -3;{Файл драйвера устройства не найден} 

grInvalidDriver= -4;{Неправильный файл драйвера устройства} 

grNoLoadMem = - 5;{Нет памяти для загрузки драйвера} 

grNoScanMem = - 6;{Нет памяти для просмотра областей}

grNoFloodMem = -7;{Нет памяти для закраски областей}

grFontNotFound = -8;{Файл шрифта не найден}

grNoFontMem = - 9;{Нет памяти для загрузки шрифта} 

grInvalidMode =-10;{Недопустимый графический режим} 

grError =-11;{Общая ошибка}

grIOerror =-12;{Ошибка графического ввода/вывода}

grInvalidFont =-13;{Неверный файл шрифта} 

grInvalidFontNum=-14;{Неверный номер шрифта}

Константы цвета

const

 

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;{Белый}

Следующие константы цветов могут быть использованы с SetRGBPalette для выбора цветов на графическом адаптере IBM 8514:

const

EGABlack = 0;{Темные цвета}

EGABlue = 1;

EGAGreen = 2;

EGACyan = 3;

EGARed = 4;

EGAMagenta = 5;

EGALightGray = 7;

EGABrown = 20;

EGADarkGray = 56;{Светлые цвета}

EGALightBlue = 57;

EGALightGreen = 58;

EGALightCyan = 59;

EGALightRed = 60;

EGALightMagenta = 61;

EGAYellow = 62;

EGAWhite =63;

Константы типов и толщины линий

const

SolidLn=0;{Сплошная}

DottedLn=1;{Точечная}

CenterLn=2;{Штрихпунктирная}

DashedLn=3;{Пунктирная}

UserBitLn=4;{Тип определяется пользователем}

NormWidth=1;{Нормальная толщина}

ThickWidth= 3;{Тройная толщина}

Константы управления шрифтом

const

DefaultFont = 0;{Матричный шрифт 8x8}

TriplexFont = 1;{Шрифт триплекс; файл TRIP.CHR}

SmallFont = 2;{Мелкий шрифт; файл LITT.CHR}

SansSerifFont= 3;{Прямой шрифт; файл SANS.CHR}

GothicFont = 4;{Готический шрифт; файл GOTH.CHR}

HorizDir = 0;{Горизонтальное направление}

VertDir = 1;{Вертикальное направление}

UserCharSize = 0;{Размер символа, определяемый пользователем}

LeftText = 0;{Указатель слева от текста}

CenterText = 1;{Указатель по центру текста}

RightText = 2;{Указатель справа от текста}

BottomText = 0;{Указатель снизу от текста}

CenterText = 1;{Указатель по центру текста}

TopText = 2;{Указатель сверху от текста}

Константы отсечения

const

ClipOn = True;{Отсекать изображение} 

ClipOf£= False;{Игнорировать окно (не отсекать изображение)}

Константы для Bar3D

const

TopOn = True;{Рисовать вершину}

TopOff= False;{Не рисовать вершину}

Константы шаблона штриховки

const

EmptyFill=0;{Нет штриховки} 

SolidFill=1;{Сплошная штриховка} 

LineFill=2;{--- штриховка} 

LtSlashFill=3;{/// штриховка}

SlashFill=4;{/// штриховка (толстыми линиями)}

BkSlashFill=5;{\\\ штриховка (толстыми линиями)} 

LtBkSlashFill=6;{\\\ штриховка}

HatchFill=7;{+++ штриховка} 

XHatchFill=8;{ххх штриховка}

InterleaveFill=9;{Штриховка в клетку} 

WideDotFill =10;{Штриховка редкими точками}

CloseDotFill=11;{Штриховка частыми точками} 

UserFill =12;{Штриховка задается пользователем}

Битовые константы

const

CopyPut = 0;{MOV}

XORPut = 1;{XOR}

OrPut = 2;{OR}

AndPut = 3;{AND}

NotPut = 4;{NOT}

Константа палитры

const

MaxColors=15;{Максимальное количество цветов}

П4.4.2. Типы

type

PaletteType = record {Используется в GetPallete}

Size : Byte;

Colors : array [0..MaxColors] of Shortlnt; 

end; 

LineSettingsType = record {Используется в GetLineSettings}

LineStyle Word;

Pattern Word;

Thickness Word; 

end; 

TextSettingsType = record {Используется в GetTextSettings}

Font :Word;

Direction : Word;

CharSize : Word;

Horiz : Word;

Vert : Word; 

end; 

FillSettingsType = record {Используется в GetFillSettings}

Pattern : Word;

Color : Word; 

end;

FillPatternType = array [1..8] of Byte; 

PointType = record {Для задания координат многоугольников}

X,Y: Integer; 

end; 

ViemPortType = record {Используется в GetViewSettings}

X1, Y1, X2, Y2: Integer; 

Clip : Boolean; 

end;

ArcCoordsType = record {Используется в GetArcCoords} 

X, У : Integer; 

Xstart, Ystart: Integer; 

Xend, Yend : Integer;

end;

П4.4.3. Переменные

var

GraphGetMemPrt : Pointer;{Распределение кучи} 

GraphFreeMemPrt: Pointer;{Освобождение кучи}

Эти переменные указывают на программы управления кучей модуля Graph. Если Ваша программа использует собственный алгоритм управления памятью, присвойте адреса Ваших программ распределения и освобождения памяти переменным GraphGetMemPrt и GraphFreeMemPrt.

П4.4.4. Процедуры

Procedure Arc(X, Y: Integer; StAngle, EndAngle, Radius: Word) Рисует дугу радиусом Radius от начального угла StAngle к конечному EndAngle, используя X, Y как координаты центра.

Procedure Bar (X1, Y1, X2, Y2 : Integer) Рисует полосу заданного размера, используя текущий стиль и цвет.

Procedure Bar3D(X1, Y1, X2, Y2: Integer; Depth: Word; Top: Boolean) Рисует трехмерную полосу, используя текущий стиль и цвет.

Procedure Circle (X, Y: Integer; R: word) Рисует окружность радиуса R, используя X,Y как координаты центра.

Procedure ClearDevice Очищает экран. 

Procedure ClearViewPort Очищает окно. 

Procedure CloseGraph Закрывает графический режим.

Procedure DetectGraph (var Driver, Mode: Integer) Возвращает тип Driver установленного драйвера и текущий режим Mode его работы.

Procedure DrawPoly (NumPoints: Word; var PolyPoints) Рисует многоугольник из NumPoints вершин с координатами в PolyPoints текущим цветом и типом линии.

Procedure Ellipse (X, Y; Integer; StAngle, EndAngle, XR, YR: Word) Рисует эллиптическую дугу от начального угла StAngle к конечному углу EndAngle, используя X, Y как координаты центра и XR. YR - как горизонтальный и вертикальный радиусы.

Procedure FillEllipse(X, Y; Integer; XR, YR: Word) Рисует заштрихованный эллипс, используя X, Y как центр uXR, YR как горизонтальный и вертикальный радиусы.

Procedure FillPoly (NumPoints: word; var PolyPoints) Рисует и штрихует многоугольник, содержащий NPoints вершин с координатами в PolyPoints.

Procedure FloodFill (X, Y; Integer; Border; Word) Штрихует замкнутую область, содержащую внутреннюю точку с координатами X, Y и ограниченную линией с цветом Border. Используется текущий образец штриховки и цвет.

Procedure GetArcCoords (var ArcCoo: ArcCoordsType) Возвращает координаты центра, начала и конца дуги.

Procedure GetAspectRatio (var XAsp, YAsp: Word) Возвращает два числа, позволяющие оценить отношение сторон графического экрана (XAsp/YAsp).

Procedure GetDefaultPalette(var Palette; PaletteType) Возвращает текущую палитру в записи PaletteType.

Procedure GetFillPattern(var FillPatt: FillPatternType) Возвращает текущий образец штриховки.

Procedure GetFillSettings (var FillInfo: FillSettingsType) Возвращает текущий образец и цвет штриховки.

Procedure GetImage(X1, Y1, X2, Y2; Integer; var BitMap) Сохраняет в переменной BitMap битовый образ указанной части экрана.

Procedure GetLineSettings (var LineInfo; LineSettingsType) Возвращает текущий стиль, шаблон и толщину линии.

Procedure GetModeRange(GraphDriver: Integer; var LoMode, HiLode: Integer) Для графического драйвера GraphDriver возвращает диапазон возможных режимов работы.

Procedure GetPalette (var Palette: PaletteType) Возвращает текущую палитру и ее размер.

Procedure GetTextSettings (var TextInfo; TextSettingsType) Возвращает текущий шрифт, направление, размер и выравнивание текста, установленные процедурами SetTextStyle и SetTextJustify.

Procedure GetViewSettings (var viewport: NiewPortType) Возвращает координаты и признак отсечки текущего окна.

Procedure GraphDefaults Устанавливает стандартные параметры графического режима.

Procedure InitGraph(var Driver, Mode; Integer; Path: String) Инициализирует графический режим. Переменные Driver и Mode должны содержать тип графического драйвера и его режим работы. Допускается указать Driver = 0 для автоматического определения этих параметров по результатам тестирования аппаратуры. Параметр Path определяет маршрут поиска файла графического драйвера.

Procedure Line (X1, Y1, Х2, Y2: Integer) Рисует линию от точки X1, Y1 до точки Х2, Y2.

Procedure LineRel(DX, DY: Integer) Рисует линию от текущего указателя к точке, заданной приращением координат.

Procedure LineTo(X, Y: Integer) Рисует линию от текущего указателя к точке X, Y.

Procedure MoveRel (DX, DY) Смещает текущий указатель к точке, заданной приращением координат.

Procedure MoveTo(X, Y: Integer) Смещает текущий указатель к точкеX,Y. 

Procedure OutText (TextString: String) Выводит текстовую строку на экран.

Procedure OutTextXY(X, Y: Integer; TextString: String) Выводит текст в заданное место экрана.

Procedure PieSlice(X, Y: Integer; StAngle, EndAngle, Radius: Word) Рисует и штрихует сектор окружности радиусом Radius с центром в X.Y от начального угла StAngle к конечному углу EndAngle.

Procedure PutImage(X, Y: Integer; var BitMap; BitBlt: Word) Выводит битовый образ на экран.

Procedure PutPixel(X, Y; Integer; Color: Word) Выводит точку цветом Color с координатами X. Y.

Procedure Rectangle (XI, Yl, X2, Y2: Integer) Рисует прямоугольник, используя текущий цвет и тип линии.

Procedure RestoreCRTMode Восстанавливает текстовый режим работы экран.

Procedure Sector(X, Y: Integer; StAngle, EndAngle, XR, YR: Word) Рисует и штрихует сектор эллипса радиусами XR, YR с центром в X, Y от начального угла StAngle к конечному углу EndAngle.

Procedure SetActivePage(Page; Word) Устанавливает активную страницу для графического вывода.

Procedure SetAllPalette(var Palette) Изменяет все цвета палитры.

Procedure SetAspectRatio(XAsp, YAsp: Word) Изменяет масштабный коэффициент отношения сторон графического экрана.

Procedure SetBkColor (Color: Word) Устанавливает цвет фона.

Procedure SetColor (Color: Word) Устанавливает основной цвет, которым будет осуществляться рисование.

Procedure SetFillPattern (Pattern: FillPatternType; Color: Word) Устанавливает произвольный образец штриховки.

Procedure SetFillStyle (Pattern, Color: Word) Устанавливает образец штриховки и цвет.

Procedure SetGraphBuf Size (Size: Word) Позволяет изменить размер буфера для функций штриховки.

Procedure SetGraphMode(Mode: Integer) Устанавливает новый графический режим и очищает экран.

Procedure SetLineStyle(LineStyle, Pattern, Thickness: Word) Устанавливает толщину и стиль линии.

Procedure SetPalette(ColorNum, Color: Word) Заменяет цвет палитры с номером ColorNum на цвет Color.

Procedure SetRGBPallete(ColorNum, Red, Green, Blue: Integer) Позволяет модифицировать палитру для IBM 8514 и VGA.

Procedure SetText Justify (Horiz, Vert: Word) Устанавливает выравнивание текста, ис: пользуемое в процедурах OutText и OutTextXY.

Procedure SetTextStyle (Font, Direction, CharSize; Word) Устанавливает текущий шрифт, стиль и размер текста.

Procedure SetUserCharSize(MultX, DivX, MultY, DivY: Word) Изменяет пропорции шрифта.

Procedure SetViewPort (X1, Y1, X2, Y2: Integer; ClipOn; Boolean) Устанавливает текущее окно для графического вывода.

SetVisualPage(PageNo: Word) Устанавливает номер видимой графической страницы.

SetWriteMode(WriteMode; Integer) Устанавливает режим вывода (копирование или XOR) для линий, рисуемых процедурами DrawPoly, Line, LineRel, LineTo, Rectangle.

П4.4.5. Функции

Procedure GetBkColor; Word Возвращает текущий фоновый цвет.

Procedure GetColor; Word Возвращает текущий цвет.

Procedure GetDriverName; String Возвращает строку с именем текущего драйвера.

Procedure GetGraphMode: Integer Возвращает текущий графический режим.

Procedure GetMaxColor; Word Возвращает максимальный цвет, который можно задать в SetColor.

Procedure GetMaxMode: Integer Возвращает номер максимального режима текущего загруженного драйвера.

Procedure GetMaxX: Integer Возвращает максимальную горизонтальную координату графического экрана.

Procedure GetMaxY; Integer Возвращает максимальную вертикальную координату графического экрана.

Procedure GetModeName(ModeNum; Word) ; String Возвращает строку с именем указанного графического режима.

Procedure GetPaletteSize: Integer Возвращает размер таблицы палитры. 

Procedure GetPixel (X, Y; Integer) : Word Возвращает цвет пикселя с координатами X,Y. 

Procedure GetX: Integer Возвращает координату X текущего указателя. 

Procedure GetY; Integer Возвращает координату У текущего указателя.

Procedure GraphErrorMsgtErrorCode: Integer): String Возвращает строку сообщения об ошибке для заданного кода ErrorCode.

Procedure GraphResult: Integer Возвращает код ошибки для последней графической операции.

Procedure ImageSize(X1, Y1, X2, Y2: Integer) Возвращает число байт, требуемое для сохранения прямоугольной области экрана.

Procedure InstallUserDriver(Name: String; AutoDetectPtr; Pointer): Integer Устанавливает пользовательский драйвер устройства в таблицу драйверов устройств.

Procedure InstallUserFont (FontFileName: String): Integer Устанавливает новый шрифт, который не встроен в BGI систему.

Procedure RegisterBGIdriver (Driver: Pointer); Integer Регистрирует драйвер для графической системы.

Procedure RegisterBGIfont (Font: Pointer): Integer Регистрирует шрифт для графической системы.

Procedure TextHeight (TextStr: String) : Word Возвращает высоту строки в пикселах. 

Procedure TextWidth(TextStr: String): Word Возвращает ширину строки в пикселах.