Турбо Паскаль 6.0

Действие на изменение состояние.


Видимый элемент часто выполняет определенные действия при вызове State, в зависимости от результирующего состояния флагов. Например кнопка просматривает State и изменяет свой цвет на бирюзовый, когда становится активной. Типичный пример SetState для объекта, порожденного от TView.

procedure TButton.SetState(AState: Word; Enable: Boolean); begin TView.SetState(AState, Enable); if AState and (sfSelected + sfActive) <> 0 then DrawView; if AState and sfFocused <> 0 then MakeDefault(Enable); end;

Заметим, что Вы должны вызвать TView.SetState из нового метода SetState. TView.SetState выполняет установку или очистку флагов состояния. Затем Вы можете определить любые действия, основанные на состоянии видимого элемента. TButton проверяет, находится ли он в активном окне для того, чтобы решить, должен ли он рисовать себя. Он так же проверяет, является ли он активным и в этом случае вызывает свой метод MakeDefault, который устанавливает или отменяет активность в зависимости от параметра Enable. Если Вам необходимо выполнить изменения в видимом элементе или программе когда состояние определенного видимого элемента изменяется, Вы можете сделать это, перекрыв SetState этого видимого элемента. Предположим, что Ваша программа включает текстовый редактор и Вы хотите разрешить или запретить все команды редактирования в полосе меню в зависимости от того, открыт редактор или нет. SetState текстового редактора определен:

procedure TEditor.SetState(AState: Word; Enable: Boolean); const EditorCommands = [cmSearch, cmReplace, cmSearchAgain, cmGotoLine, cmFindProc, cmFindError, cmSave, cmSaveAs]; begin TView.SetState(AState, Enable); if AState and sfActive <> 0 then if Enable then EnableCommands(EditorCommands) else DisableCommands(EditorCommands); end;

Примечание: Этот код используется видимым элементом редактора IDE Turbo Pascal, и его поведение должно быть Вам знакомо.

Программист и Turbo Vision часто взаимодействуют, когда состояние изменяется. Предположим, что Вы хотите, чтобы блоковый курсор появился в Вашем текстовом редакторе когда включен режим вставки. Во-первых, режим вставки редактора связан с клавишей, скажем, с клавишей Ins. Когда текстовый редактор активен и клавиша Ins нажата, текстовый редактор получает событие клавиши Ins. Метод HandleEvent текстового редактора откликается на событие Ins переключением внутреннего состояния видимого элемента, говорящегоо том, что режим вставки изменился и вызывая метод BlockCursor. Turbo Vision делает остальное. BlockCursor вызывает SetState видимого элемента для установки состояния sfCursorIns в True.



Содержание раздела