Функции WhereX и WhereY

С помощью этих функций типа Byte можно определить текущие координаты курсора: WhereX возвращает его горизонтальную, a WhereY – вертикальную координаты.

В следующей программе сначала в центре экрана создается окно, которое обводится рамкой, затем в окне выводится таблица из двух колонок.

Uses CRT;

const

LU =#218;{Левый верхний угол рамки}

RU =#191;{Правый верхний угол)}

LD =#192;{Левый нижний}

RD =#217;{Правый нижний}

H =#196;{Горизонтальная черта}

V =#179;{Вертикальная черта}

X1 =14;{Координаты окна}

Y1 =5;

X2 =66;

Y2 =20;

Txt = 'Нажмите клавишу Enter...';

var

k: integer;

begin

ClrScr; {Очищаем экран}

{Создаем окно в центре экрана - желтые символы на синем фоне:}

TextBackground(Blue);

TextColor(Yellow);

Window(X1,Y1,X2,У2);

ClrScr;

{Обводим окно рамкой}

Write(LU); {Левый верхний угол}

{Горизонтальная линия}

for k: = X1+1 to X2-1 do Write(H);

Write(RU);{Верхний правый угол}

for k := Y1+1 to Y2-1 do{Вертикальные линии}

begin

GotoXY(1,k-Y1+1);{Переходим к левой границе}

Write(V);{Левая черта}

GotoXY(X2-X1+1,WhereY){Правая граница}

Write(V){Правая черта}

end;

Write(LD);

{Левый нижний угол}

Window(X1,Y1,X2,Y2+1);{Расширяем вниз на одну строку координаты окна, иначе вывод в правый нижний угол вызовет прокрутку окна вверх}

GotoXY(2,Y2-Y1+1); {Возвращаем курсор из левого верхнего угла окна на нужное место}

{Горизонтальная рамка}

for k:= X1+1 to X2-1 do Write(H);

Write(RD); {Правый нижний угол}

{Определяем внутреннюю часть окна}

Window(X1+1,Y1+1,X2-1,Y2-1);

{Выводим левый столбец}

for k := Y1+1 to Y2-2 do

WriteLn('Левый столбец, строка ',k-Y1);;

{Ждем нажатия любой клавиши}

Write('Нажмите любую клавишу...');

k := ord(ReadKey); if k=0 then

k := ord(ReadKey);

DelLine; {Стираем приглашение}

{Выводим правый столбец}

for k := Y1+1 to Y2-2 do

begin

GotoXY((X2-X1) div 2,k-Y1);

Write('Правый столбец, строка ',k-Y1)

end ;

{Выводим сообщение и ждем нажатия клавиши Enter}

GotoXY((X2-X1-Length(Txt)) div 2,Y2-Y1-1);

TextColor(White);

Write(Txt);

ReadLn;

{Восстанавливаем стандартный режим}

TextMode(CO80)

end.

Три следующие процедуры без параметров могут оказаться полезными при разработке текстовых редакторов.