Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Pascal: Общие вопросы > Управление формой курсора


Автор: e-moe 21.06.04, 11:49
УПРАВЛЕНИЕ ФОРМОЙ КУРСОРА

Курсор служит двум целям. Во-первых, он указывает позицию экрана, в которую про-грамма должна производить вывод очередного символа. Во-вторых, он делает видимой на экране точку отсчета для пользователя. Только для второй цели курсор должен быть види-мым. Тем не менее вне зависимости от того, видим он или невидим, курсор всегда указывает определенную позицию на экране. Это связано с тем, что операционная система в любом случае производит вывод на экран, начиная с текущей позиции курсора.
Программа может управлять формой курсора, вплоть до полного его отключения, с по-мощью функции 1 программного прерывания $10. Для этого требуется лишь загрузить в ре-гистры CH и CL номера начальной и конечной линий курсора.

Курсор строится из тонких горизонтальных отрезков, верхний из которых называется начальной линией курсора, а нижний - его конечной линией. Размер курсора по вертикали не может превышать размер знакоместа, ширина курсора всегда равна ширине знакоместа. На-чальная и конечная линии отсчитываются сверху вниз: 0 .. 7 или 0 .. 13.
В знакоместе 8 х 8 нормальный курсор занимает строки 7 и 8, в знакоместе 14 х 8 - строки 12 .. 14. Значение начальной строки, равное 32 ($20), отключает курсор, т.е. делает его невидимым. Мигание видимого курсора отключить нельзя, так как оно реализовано ап-паратно.
Ниже приведена программа, иллюстрирующая управление курсором.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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.


По мотивам лекций Назаренко В.И.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)