русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Управление формой курсора


Дата добавления: 2015-06-12; просмотров: 565; Нарушение авторских прав


Мигающий курсор постоянно присутствует на экране дисплея, если он отображает текстовую информацию (во время счета или {489} ввода-вывода данных на экран). Иногда он совершенно не нужен, например при работе систем меню на экране или при выводе заставки программы и т.п.

Можно управлять формой курсора до полного его отключения с помощью функции номер 1 аппаратного прерывания 10H. Нужно лишь загрузить в определенные регистры начальную и конечную линии курсора и вызвать прерывание.

Размер курсора по вертикали не может превышать размер символа: какова высота матрицы текущего шрифта, таково и число линий (строк) в курсоре. Ширина курсора неизменна и равна ширине матрицы шрифта. Начальная и конечная линии отсчитываются сверху вниз, причем самая верхняя линия нумеруется как нулевая. Подразумевается, что конечная линия находится ниже начальной, но может быть и наоборот. Варианты вида курсора в зависимости от расположения этих линий показаны на рис. 20.12. Темные области соответствуют видимой мигающей части курсора.

Начало равно Концу или на 1 строку выше него

Верх матрицы Верх матрицы Верх матрицы

 
────

────

 
← Начало
<===

 

← Конец
← Начало
 

 

 
← Конец
────
────

 

Низ матрицы Низ матрицы Низ матрицы

Рис. 20.12

Если верх матрицы имеет четкий номер 0, то ее низ «плавает» в зависимости от текущего шрифта. Так, для адаптера CGA рабочий диапазон будет 0..7, для MDA/Hercules — 0..13. Адаптер EGA использует оба этих интервала в зависимости от режима работы (шрифт 8x8 или 8x14). Для адаптеров класса VGA этот диапазон может вырасти до размеров соответствующих шрифтов (но в режимах эмуляции CGA и MDA на этих адаптерах диапазоны будут по-прежнему 0..7 и 0..13).



Формально прерывание принимает значения номеров линий от 0 до 31. Попытайтесь, когда будет свободное время, изменить форму курсора в таком диапазоне. Нам кажется, что уловить логику в реакции курсора на эти значения, да еще на разных адаптерах, достаточно сложно. {490}

Значение стартовой линии, равное 32, отключает курсор (делает его невидимым). Отключить мигание курсора нельзя, так как оно реализовано аппаратно. Пример процедур, меняющих форму курсора, приведен на рис. 20.13.

USES { ПРИМЕР ПРОЦЕДУР ИЗМЕНЕНИЯ ФОРМЫ КУРСОРА } CRT, DOS; { используются модули CRT и DOS } { Процедура устанавливает форму курсора, } PROCEDURE SetCursorSize(c_Start, c_End : Byte ); VAR Regs : Registers; { доступ к регистрам } BEGIN with Regs do begin AH = $01; { функция формы курсора } CH = c_Start; { стартовая линия курсора } CL = c_End; { конечная линия курсора } end; {with} Intr($10, Regs) { вызов прерывания 10H БСВВ } END; { Процедура устанавливает нормальную форму курсора. } PROCEDURE SetNormalCursor; VAR SE : Word; { компактная запись линий } BEGIN if ( LastMode >= Font8x8 ) then SE:=$0507 else if (LastMode = Mono ) then SE:=$0B0C else SE:=$0607; SetCursorSize( Hi(SE ), Lo(SE)) END; { Процедура устанавливает крупный блок-курсор. } PROCEDURE SetBlockCursor; VAR с_End : Byte; BEGIN if ( LastMode >= Font8x8 ) or ( LastMode <> Mono ) then c_End := 7 else c_End := 13; SetCursorSize( 0, с_End ) END;

Рис. 20.13 {491}

{ Процедура отменяет курсор (делает его невидимым). } PROCEDURE SetNoCursor; BEGIN SetCursorSize( 32, 0 ) END; { -— ПРИМЕР ВЫЗОВОВ -— } BEGIN ClrScr; WriteLn( 'Нажимайте клавишу ввода для', ' продолжения' ); Write( 'Крупный курсор ' ); SetBlockCursor; Readln; Write( 'Невидимый курсор ); SetNoCursor; Readln; Write( 'Нормальный курсор' ); SetNormalCursor; Readln END.

Рис. 20.13 (окончание) {492}



<== предыдущая лекция | следующая лекция ==>
Крупные надписи на экране | Как организовать опрос алфавитно-цифровой клавиатуры


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.606 сек.