Примеры программных реализаций. Строка статуса.
В этом разделе приводятся примеры программных реализаций некоторых типичных задач, решаемых с помощью Turbo Vision. Эти примеры не имеют сколько-нибудь серьезного прикладного назначения, они просто иллюстрируют возможные приемы программирования. Поскольку большинство видимых объектов используется в тесной взаимосвязи, примеры иллюстрируют программирование сразу нескольких объектов.
В следующей программе создается строка статуса, содержание которой зависит от установленного контекста подсказки (определяется значением поля TProgram.HelpCtx). В зависимости от действий пользователя эта строка будет содержать текст:
Esc Выход F1 Сменить контекст на 1 Однажды в студеную, зимнюю пору
Либо:
ESC Выход F2 Сменить контекст на 0 Я из лесу вышел. Был сильный мороз…
Переключение строки осуществляется клавишами F1 и F2, для выхода из программы используется клавиша Esc.
Uses Objects,App,Menus,Drivers,Views; type PMyStatusLine = TMyStatusLine; TMyStatusLine = object (TStatusLine) Function Hint(Cntx: Word): String; Virtual; end; MyApp = object (TApplication) StatLine: PMyStatusLine; Constructor Init; Procedure InitStatusLine; Virtual; Procedure HandleEvent(var Event: Tevent); Virtual; end; const cmCntx1 =200; cmCntx2 = 201; {-----------------} Constructor MyApp.Init; begin Inherited Init; Insert (StatLine) {Использовать нестандартную строку статуса} end {MyApp.Init}; Procedure MyApp. Ini tstatusLine; {Инициация нестандартного поля MyApp. StatLine} var R: Trect; begin GetExtent (R); R.A.Y: = pred(R.B.Y); StatLine: = New(PMyStatusLine, Init(R, NewStatusDef (0, 0, {Первый вариант строки} NewStatusKey (' ~Esc~ Выход1, kbEsc, cmQuit, NewStatusKey (' ~F1~ Сменить контекст на 1', kbF1, cmCntxl, NIL)), NewStatusDef (1, 1, {Второй вариант строки} NewStatusKey (' ~Esc~ Выход ', kbEsc, cmQuit, NewStatusKey (' ~F2~ Сменить контекст на 0 ', kbF2, cmCntx2, NIL)), NIL)))); end {MyApp. Ini tstatusLine}; {--------------------} Procedure MyApp. HandleEvent; {Переключение контекста и обновление строки статуса} begin Inherited HandleEvent (Event); case Event. Command of cmCntx1: HelpCtx: = 1; cmCntx2: HelpCtx: = 0; else ClearEvent (Event); end; if Event. What < > evNothing then begin StatLine. Update; ClearEvent (Event) end end {MyApp. HandleEvent }; {---------------------} Function TMyStatusLine. Hint (Cntx: Word):String; {Переключение поля подсказки} const Prompt: array [0..1] of String =( 'Однажды в студеную, зимнюю пору', 'Я из лесу вышел. Был сильный мороз…'); begin Hint: = Prompt [Cntx] end {TMyStatusLine.Hint}; {---------------------} var P: MyApp; begin P.Init; P. Run; P. Done end.