![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как "прикрутить" HTML Help? [D5, Win2k]
Navi © (2005-11-05 16:55:00)Здравствуйте!
В качестве help-файла используется *.chm, полученный Microsoft HTML Help Workshop. На OnCreate главной
формы: Application.OnHelp:= AppHelp;
function TForm1.AppHelp(Command: Word; Data: Longint; var CallHelp: Boolean): Boolean;
begin
Result:= True;
try
CallHelp:= False;
case Command of
HELP_COMMAND: ;
HELP_CONTENTS: DisplayHelpTableOfContents;
HELP_CONTEXT: DisplayHelpByContext(Data);
HELP_CONTEXTPOPUP: DisplayHelpContextPopup(Data, 'popup_topics.txt');
HELP_KEY: ;
HELP_QUIT: ;
end;
except
Result:= False;
end;
end;
procedure DisplayHelpContextPopup(const ContextID: LongInt; const ATextName: String);
var
HHPopup: THHPopup;
begin
if HHCTRL <> 0 then // где HHCTRL:= LoadLibrary('HHCTRL.OCX');
begin
FillChar(HHPopup, SizeOf(HHPopup), #0);
with HHPopup do
begin
cbStruct:= SizeOf(HHPopup);
hinst:= 0;
idString:= ContextID;
pszText:= nil;
pt:= Point(0, 0);
clrForeground:= -1;
clrBackground:= -1;
rcMargins:= Rect(-1, -1, -1, -1);
pszFont:= PChar('MS Shell Dlg, 10, , ');
end;
HHPopup.cbStruct:= SizeOf(HHPopup);
HtmlHelp(0, PChar(GetHelpFile('') + '::/' + ATextName), HH_DISPLAY_TEXT_POPUP, LongInt(@HHPopup));
// где HtmlHelp:= GetProcAddress(HHCTRL, 'HtmlHelpA');
// THtmlHelpA = function(hwndCaller: THandle; pszFile: PChar; uCommand: Cardinal; dwData: LongInt): THandle; stdcall;
end;
end;
На 2-ой (модальной форме), имеющей BorderIcons = [biSystemMenu, biHelp] и BorderStyle = bsDialog лежит Edit1,
имеющий HelpContext = 1000. Если поставить фокус на Edit1 и нажать F1, то почему-то Command в AppHelp равен
HELP_CONTEXTPOPUP (а по логике д.б. HELP_CONTEXT) и вызывается DisplayHelpContextPopup. А если кликнуть
Edit1 курсором crHelp после нажатия question mark в title bar то тоже Command = HELP_CONTEXTPOPUP, т.е. все
логично. Поэтому, прошу прощения за несколько вопросов в одной ветке, но т.к. они связанные друг с другом...
1. Как сделать так, чтобы при любом фокусе и нажатии F1 получался Command = HELP_CONTEXT и Data равнялась HelpContext
для текущего диалога?
2. Что указывать параметром hinst в THHPopup? Значения Application.Handle, Application.MainForm.Handle, HInstance
приводят к "Справка по данному элементу отсутствует", а 0 - работает.
3. Что указывать параметром pt в THHPopup?
Спасибо.
Navi (2005-11-12 09:33:00) [1]Всем спасибо за информативные ответы. Разобрался сам, прочтя "Delphi Programming for the HTML Help API" by Robert Chandler.