Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.218.55.14] |
|
Сообщ.
#1
,
|
|
|
УПРАВЛЕНИЕ ФОРМОЙ КУРСОРА
Курсор служит двум целям. Во-первых, он указывает позицию экрана, в которую про-грамма должна производить вывод очередного символа. Во-вторых, он делает видимой на экране точку отсчета для пользователя. Только для второй цели курсор должен быть види-мым. Тем не менее вне зависимости от того, видим он или невидим, курсор всегда указывает определенную позицию на экране. Это связано с тем, что операционная система в любом случае производит вывод на экран, начиная с текущей позиции курсора. Программа может управлять формой курсора, вплоть до полного его отключения, с по-мощью функции 1 программного прерывания $10. Для этого требуется лишь загрузить в ре-гистры CH и CL номера начальной и конечной линий курсора. Курсор строится из тонких горизонтальных отрезков, верхний из которых называется начальной линией курсора, а нижний - его конечной линией. Размер курсора по вертикали не может превышать размер знакоместа, ширина курсора всегда равна ширине знакоместа. На-чальная и конечная линии отсчитываются сверху вниз: 0 .. 7 или 0 .. 13. В знакоместе 8 х 8 нормальный курсор занимает строки 7 и 8, в знакоместе 14 х 8 - строки 12 .. 14. Значение начальной строки, равное 32 ($20), отключает курсор, т.е. делает его невидимым. Мигание видимого курсора отключить нельзя, так как оно реализовано ап-паратно. Ниже приведена программа, иллюстрирующая управление курсором. Program DemoCursor; Uses Crt, Dos; { --------------------------------- } Procedure WaitEnter; Var ch : char; Begin Repeat ch:=ReadKey; Until ord(ch)=13; End { WaitEnter }; { --------------------------------- } Procedure SetCursor(Cursor:word); Var Reg : Registers; Begin With Reg do Begin AH:=1; { Номер функции } BH:=0; { Номер страницы } CH:=Hi(Cursor); { Начальная линия } CL:=Lo(Cursor); { Конечная линия } End; Intr($10,Reg); End { SetCursor }; { --------------------------------- } Begin SetCursor($0607); Writeln('Нормальный курсор'); WaitEnter; SetCursor($0007); Writeln('Блок-курсор'); WaitEnter; SetCursor($2000); Writeln('Отключенный курсор'); WaitEnter; SetCursor($0707); Writeln('Тонкий курсор'); WaitEnter; End. По мотивам лекций Назаренко В.И. |