Модуль CRT, корректно работающий с цветами в графических
режимах. Включает ряд расширений, как то:
рисование рамочек
сохранение/восстановление областей экрана
Задумано было больше, но не доделано, из-за устарелости CRT-based
интерфейсов.
--
Phone: 230-80-61 Victor B.Wagner
E-Mail:vitus@agropc.msk.su Dokuchaev Soil Institute
7, Pyzhevsky lane,
Moscow, Russia
{> Cut here. FileName= VCRT.DOC }
Модуль VCRT
Модуль представляет собой модифицированный стандартный модуль CRT
для Turbo Pascal 6.0,5.5 в который не добавлено практически ни одной
новой функции, но работа некоторых весьма стандартных функций
изменена так, как это казалось автору более логичным. Кроме
того ряд функций, бывших внутренними выведен в интерфейс.
Изменение первое - драйвер текстовых файлов :
1. В графических режимах CGA 320x200, EGA и VGA атрибуты
символов обрабатываются так же как и в текстовых.
2. Процедуры READ и READLN допускают редактирование с
помощью стрелок, клавиш Home, End, BackSpace и Delete.
3. Процедуры READ и Readln в графических режимах эмулируют
курсор
Изменуние второе:
Процедуры
InsLine, DelLine, ClrEol, ClrScr обрабатывают атрибуты во всех
графических режимах
Изменение третье
Добавлены процедуры
ReInitCrt - инициализация внутренних переменных
необходимо вызывать после изменения режима экрана не
средствами VCRT для корректной работы.
ReadKeyWord - возвращает двухбайтовый код нажатой клавиши
Старший байт - скэнкод.
Beep - выдает стандартный звуковой сигнал. Эквивалент
Write(#7)
Изменение третье:
Переменная DirectVideo инициализируется в False, если текущий
режим графический.
Ограничения:
1. Вывод на экран всегда через Bios, независимо от значения
DirectVideo
2. Процедура Readln не позволяет вводить строки,
превышающие расстояние до правой границы экрана.
Модуль VCRTEXT
Содержит расширения CRT, весьма полезные и отчасти повторяющие
процедуры tpCrt и opCrt (Copyright by TurboPower Software), но,
как и VCRT, корректно работающие в графике.
Procedure FrameWindow(X1,Y1,X2,Y2) - рисует рамку. Символы
задаются в переменной Frame. Определены константны
SingleFrame и DoubleFrame;
Procedure SaveWindow(X1,y1,X2,y2:byte;var SavePtr:Pointer);
Работает только в текстовом режиме
Динамическую память для буфера окна выделяет сама
Procedure RestoreWindow(X1,Y1:Byte;Var SavePtr:Pointer);
Восстанавливает окно, сохраненное SaveWindow даже и в граф.
режимах
Procedure DisposeWindow(var SavePtr:Pointer);
Освобождает буфер окна
Procedure Inverse(Count:Byte);
в текстовых режимах заменаяет атрибуты Count символов слева от
курсора на атрибут, хранящийся в переменной InverseAttr, в гра-
фике делает XOR c ним. В режиме CGA монохром просто инвертирует
символы не думая об атрибутах
Function ReadScreen(X,Y:Byte):Char;
Читает символ с 0 страницы (через BIOS)
Function ReadAttr(X,Y:Byte):Byte;{Works in text mode only}
Читает атрибут (только в текстовом режиме)
Далее пошли инструменты более высокого уровня (пока не реализованы,
а потому и не описаны. Три варианта меню.
1. Меню с произвольным расположением строк на экране
{Clears all internal data for menu}
Procedure ClearMenu;
{Adds string to menu}
Procedure Prompt(S:String;Row,Col:Byte);
{Allows selection from ClipperLike menu and returns Choice number or 0 if
Escaped}
Function Menu:Integer;
2 Вертикальное меню в текущем окне (должно быть заполнено до вызова
процедуры)
Function VertMenu:Integer;
3. Прокручиваемое меню в текущем окне
Function LongMenu(ItemFuns:MenuItemType):Integer;
|