Иллюстрированный самоучитель по Tirbo Pascal



Формирование строки статуса - часть 3


В программе объявляется переменная R типа TRect. С помощью такого типа переменных программист задает координаты прямоугольного участка экрана. Эта переменная необходима нам для указания того места на экране, где будет помещено сообщение

Alt-X Выход

определяющее командные клавиши Alt-X. Для правильного задания этих координат мы использовали два предложения:

GetExtent(R);

R.A.Y := pred(R.B.Y);

В первом вызывается стандартный метод Turbo Vision GetExtent, с помощью которого в R помещаются координаты доступной в данный момент части экрана. Во втором - номер той строки (строки статуса), куда будет выводиться сообщение. В Turbo Vision тип TRect объявляется в виде следующей записи:

type

TRect = record

A: record {Координаты верхнего левого угла} 

X: Byte; Y: Byte 

end;

В: record {Координаты правого нижнего угла} 

X: Byte; Y: Byte 

end 

end;

Таким образом, второе предложение лишь уменьшает на единицу вертикальную координату самой нижней доступной строки и устанавливает полученное значение в поле R.A. Y (это поле задает вертикальную координату верхнего левого угла прямоугольного участка). Заметим, что в Turbo Vision минимальные координаты задаются значением 0, в то время как в стандартном модуле CRT Турбо Паскаля минимальные координаты имеют значение 1.

Обратите внимание на характерный прием, широко используемый в Turbo Vision: при обращении к методам NewStatusDef и NewStatusKey последним параметром указывается переменная типа Pointer. Внутри методов эта переменная трактуется как ссылка на новый метод, что позволяет организовать цепочку последовательных определений. Вложенная последовательность вызовов заканчивается зарезервированной константой NIL, указывающей на конец цепочки. Если бы мы, например, захотели добавить в строку статуса определение клавиши F10, связав ее с закрытием активного окна, мы могли бы использовать такую конструкцию:

NewStatusDef(0, $FFFF,

NewStatusKey('~Alt-X~ Выход', kbAltX, cmQuit,

NewStatusKey('~F10~ Закрыть окно', kbFl0, cmClose,

NIL)), {Нет других клавиш} 

NIL) {Нет других определений}

Описанный пример позволяет нам сделать очень важный вывод:

Чтобы модифицировать стандартное поведение объекта, необходимо создать объект-потомок от этого объекта и

перекрыть в нем нужный метод.




Содержание  Назад  Вперед