Контекстная помощь
Следующая программа будет выдавать контекстно-зависимые справочные сообщения из файла helptest.hlp при каждом нажатии на F1.
Uses App, Menus, Drivers, Views, Objects, HelpFile, Dialogs; const cmChangeCtx =1000; type PCtxView = ^TCtxView; TCtxView = object (TView) Constructor Init; Procedure Draw; Virtual; end; MyApp = object (TApplication) Ctx: PCtxView; Constructor Init; Procedure InitStatusLine; Virtual; Procedure HandleEvent(var Event: TEvent); Virtual; end; PMyHelpWindow = AMyHelpWindow; MyHelpWindow = object (THelpWindow) Function GetPalette: PPalette; Virtual; end; Procedure MyApp.InitStatusLine; var R: TRect; begin GetExtent(R); R.A.Y: = pred(R.B.Y); StatusLine: = New(PStatusLine,Init(R, NewStatusDef(0, $FFFF, NewStatusKey('~ALT + X~ Выход', kbALTX, cmQuit, NewStatusKey('~F1~ Помощь',kbF1, cmHelp, NewStatusKey('~F2~ Изменить контекст',kbF2, cmChangeCtx, NewStatusKey('~F5~ Распахнуть окно1, kbF5, cmZoom, NIL)))}, NIL))) end; Constructor MyApp.Init; begin TApplication.Init; Ctx: = NewtPCtxView, Init); Insert(Ctx); RegisterHelpFile end; Procedure MyApp.HandleEvent; var HF: PHelpFile; HS: PDosStream; HW: PMyHelpWindow; const HelpOpen: Boolean = False; Procedure DoHelp; {Обеспечивает доступ к контекстно-зависимой справочной службе} var С: Word;. begin ClearEvent(Event); { Открываем DOS-поток: } HS: = New(PDosStream, Init('HELPTEST.HLP', stOpenRead)); { Создаем и инициируем экземпляр объекта THelpFile: } HF: = New(PHelpFile, Init(HS)); HelpOpen: = HSA.status = stOk; if HelpOpen then begin {Создаем окно справочной службы и связываем его с потоком HS и текущим контекстом:} HW: = New(PMyHelpWindow, Init(HF, GetHelpCtx)); if ValidView(HW) <> NIL then begin С: = ExecView(HW); {Выдаем справку} Dispose(HW) {Ликвидируем окно} end; HelpOpen: = False end else Dispose (HF, Done) end;