Доступ к отображаемой памяти ___ 147
экрана с помощью прерывания BIOS $10 и в зависимости от этого резервирует EMS— память нужной длины. Код режима помещается в поле Mode и контролируется при вызове других методов объекта. Это означает, что если Ваша программа переключает режим работы дисплея, например переходит из текстового в графический, для сохранения копий экрана Вы должны использовать разные копии объекта TEMSScreen. Напротив, в рамках одного и того же режима единственная копия TEMSScreen может сколько угодно раз использоваться для сохранения/восстановления экрана. Поскольку унаследованные методы TEMSArea.Rea.dEMS и TEMSArea. Write— Ems не перекрываются, Вы можете использовать их для того, чтобы обойти это ограничение (например, чтобы объект, рассчитанный на работу с графическим экраном EGA/VGA, использовать для сохранения/восстановления текстового экрана). В табл.5.4 указывается объем резервируемой EMS^- памяти для наиболее распространенных дисплейных адаптеров.
Таблица 5.4 Объем резервируемой EMS-памяти. для различных дисплейных адаптеров___
Тип адаптера |
Режим |
Резервируемая память в страницах по 16 Кбайт |
MDA |
Все режимы |
1 |
CGA |
Все режимы |
1 |
EGA |
Текстовые |
i |
" |
Графический 640х350 16 цветов |
7 |
VGA |
Текстовые |
1 |
" |
Графический 640х480 16 цветов |
10 |
SVGA |
Графический 1024х?68 16 цветов |
24 |
|
Графический 1024х768 256 цветов |
48 |
Поля
Mode Mode: Byte; Только чтение
Код режима работы экрана на момент создания объекта. Все методы объекта (кроме Imt и Store) проверяют соответствие текущего режима работы режиму, указываемому этим полем.
Методы
Init Constructor Init;
Создает объект: с помощью прерывания $10 (подфункция $F) определяет текущий режим работы экрана, затем с помощью вызова родительского метода TEMSArea.Imt резервирует EMS— память нужного размера, после чего помещает в поле Mode код режима дисплея.
Load Constructor Load (P: Pile);
Считывает копию объекта из файла F: вызывает TEMSArea, затем читает из файла заголовок RegHeadTEMSScreen и поле Mode. Перед обращением к методу файловую переменную F необходимо связать с уже существующим нетипизироваиным файлом, а сам файл должен быть открыт для чтения блоками длиной в 1 байт.
Store Procedure Store (var F: File); Virtual;