Формирование строки статуса
Стандартный вид экрана, показанный на рис. 15.1, можно изменять. Попробуем придать ему некоторый специфический для нашей программы вид. Например, заменим в строке статуса стандартное сообщение:
ALT + X Exit
На русифицированное:
ALT + X Выход
Таким образом, нам необходимо модифицировать стандартное поведение объекта Notebook. Для этого мы должны отыскать в типе TApplication метод, ответственный за создание строки статуса. Если мы обратимся к прил.П6, то обнаружим, что объект типа TApplication содержит методы Init и Done, с помощью которых создаются и уничтожаются экземпляры объекта, но в нем нет метода, ответственного за строку статуса. Однако из таблицы наследования нетрудно определить, что этот метод (InitStatusLine) он наследует от своего родителя TProgram. Как изменить работу метода? В рамках объектно-ориентированной библиотеки для этого поступают следующим образом: объявляется объект-потомок от стандартного объекта, поведение которого необходимо изменить, и в новом объекте описывается свой метод, ответственный за это поведение.
Изменим программу следующим образом:
Uses Арр, Objects, Menus, Drivers, Views; type TNotebook = object (TApplication) {Создаем объект-потомок от TApplication} Procedure InitStatusLine; Virtual; {Перекрываем старый метод InitStatusLine новым} end; {-----------} Procedure TNotebook. InitStatusLine; {Описание нового метода, с помощью которого создается строка статуса} var R: TRect; {Границы строки статуса} begin GetExtent (R); {Получаем в R координаты всего экрана} R.A.Y: = pred(R.B.Y); {Помещаем в R координаты строки статуса} {Создаем строку статуса:} StatusLine: = New(PStatusLine, Init(R, {Определяем один вариант строки статуса:} NewStatusDef (0, $FFFF, {Устанавливаем для этого варианта максимальный диапазон контекстной справочной службы} {Определяем единственную клавишу ALT + X: } NewStatusKey('~ALT + X~ Выход', kbALTX, cmQuit, NIL), {Нет других клавиш} NIL) {Нет других строк статуса} )) end; {TNotebook. InitStatusLine} {---------} var Notebook: TNotebook;{Изменен тип переменной!} begin Notebook. Init; Notebook. Run; Notebook. Done end.
Как видим, программа сразу же усложнилась. Во-первых, в ней используются идентификаторы, которые определены в других модулях Turbo Vision, – эти модули мы перечислили в предложении Uses. Во-вторых, нам потребовалось объявить новый объект TNotebook как потомок от объекта TApplication. Объект-потомок наследует от своего объекта-родителя все поля и методы и при необходимости может их дополнять своими полями и методами, а также перекрывать методы родителя. Как раз для того, чтобы перекрыть унаследованный от TProgram стандартный метод InitStatusLine, ответственный за создание строки статуса, нам и понадобилось объявление нового типа TNotebook.
Строка:
Procedure InitStatusLine; Virtual;
В объявлении этого типа указывает, что новый объект будет пользоваться одноименным, но иным, чем объект-родитель, методом. Возможность замены методов на одноименные, но с другим содержанием называется полиморфизмом.