Изменение размера курсора
Большинство пользователей даже не представляют насколько велики возможности семейства машин IBM PC. В частности, они позволяют изменять размер курсора. По умолчанию курсор отображается в виде одной мерцающей строчки (развертки дисплея). Однако пользователь может варьировать размером курсора от одной строки развертки дисплея до полного размера (высоты) символа. В цветном текстовом режиме курсор может иметь высоту от 0 до 8 строк развертки. (В монохромном режиме курсор может иметь высоту от 0 до 14 строк развертки, однако в данном параграфе мы будем рассматривать только цветной режим). Нижняя строка развертки
имеет номер 0. Лучше всего рассматривать изменение курсора именно
относительно строки развертки 0, так как применение другого
метода может привести к значительным расхождениям результатов на
различных компьютерах. (В принципе применение других методов
возможно, однако вам необходимо помнить, что при их использовании
вы можете не добиться соответствия форм курсора при решении одной
и той же задачи на разных компьютерах). При условии, что вы
будете рассматривать изменение формы курсора относительно нулевой
строки развертки, изменение формы курсора будет выполняться
аналогично изображенному на рис.8-1.
Для установления размера курсора вам необходимо использовать ROM-BIOS-прерывание 10Н, функцию 1, которая устанавливает размер курсора. Начало курсора (начальная строка развертки) - запоминается в регистре CН, а конец (конечная строка развертки) в регистре CL.
Строка развертки
7 ----- | |
6 ----- | | | | | |
5 ----- | | | | | | | | | |
4 ----- | | | | | | | | | | | | | |
3 ----- | | | | | | | | | | | | | | | | | |
2 ----- | | | | | | | | | | | | | | | | | | | | | |
1 ----- | | | | | | | | | | | | | | | | | | | | | | | | | |
0 | | | | | | | | | | | | | | ----- ----- ----- ----- ----- ----- -----
Рис. 8-1. Возможность изменения формы курсора в цветном режиме.
Функция size_cursor(), представленная ниже, устанавливает размер курсора.
/* Установление размера курсора */
void size_cursor(start,end)
char start,end; /* начальная и конечная строки развертки */
union REGS r;
r.h.ah = 1; /* функция адресации курсора */
r.h.ch = start;
r.h.cl = end;
int86(0x10,&r,&r);
При использовании функции size_cursor() укажите желаемые начальную и конечную строки развертки, определяющие размер курсора. Например, следующая конструкция позволяет установить высоту курсора в три строки развертки:
size_cursor(0,2);
Форма курсора может быть изменена либо очередным вызовом функции size_cursor(), либо изменением видеорежима.
Использование курсоров различной формы позволяет не только полностью удовлетворить ваши эстетические требования, но и повысит наглядность программы. Имейте в виду, что большой мерцающий курсор вызывает у пользователей раздражение.