TURBO PASCAL |
Новости
|
Воздействие на состояние поля State
В отличие от других полей поле State доступно только для чтения (поля Options, DragMode и GrowMode доступны также и для записи). Это означает, что в программе не может использоваться оператор вида State := NewState; Установить новое состояние этого поля можно только с помощью метода SetState, доступного любому видимому элементу. Метод SetState объявлен в Turbo Vision следующим образом: type TView = object (TObject) Procedure SetState(AState:Word; Enable: Boolean); Virtual; ..... end; При обращении к методу параметр AState должен содержать маску разрядов поля State, а признак Enable указывает, должны ли устанавливаться эти разряды (Enable = True) или очищаться (Enable = False). Отметим, что Turbo Vision вызывает метод SetState всякий раз, когда элемент активизируется или выбирается. Это дает возможность программе устанавливать новое состояние элемента или реагировать на действия пользователя (например, на активизацию видимого элемента). В отличие от этого поля Options, DragMode и GrowMode активизируются только при инициации элемента и далее обычно не меняются. Видимые элементы часто перекрывают метод SetState, чтобы гибко реагировать на действия пользователя. Например кнопка (объект TButton) просматривает флаги поля State и изменяет свой цвет на бирюзовый, когда становится активной. В следующем примере объект TButton вначале проверяет, принадлежит ли он активному окну, чтобы решить, рисовать себя или нет. Затем он проверяет, выбрана ли кнопка в окне и, если это так, вызывает свой метод MakeDefault, чтобы установить или сбросить (в зависимости от Enable) свою активность по умолчанию: 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; Другой пример: допустим, что Ваша программа включает в себя текстовый редактор и Вы хотите разрешить или запретить все команды редактирования в полосе меню в зависимости от того, открыт редактор или нет. В этом случае Вы можете создать такой метод SetState для текстового редактора: Procedure TEditor.SetState(AState: Word; Enable: Boolean); const EditorCommands = [cmSearch, cmReplace,cmSearchAgain, cmGotoLine, cmFindProc,cmFindError]; begin TView.SetState(AState, Enable); if AState and sfActive <> 0 then if Enable then EnableCommands(EditorCommands) else DisableCommands(EditorCommands); end;
|
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |