Иллюстрированный самоучитель по Turbo Pascal

Контекстная помощь

Следующая программа будет выдавать контекстно-зависимые справочные сообщения из файла 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;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.