Я встраиваю свою справочную систему в свою программу и работаю над контекстно-зависимой справкой, которая должна вызывать соответствующую страницу справки для активного элемента управления при нажатии клавиши F1.
На каждом элементе управления я могу установить HelpType в htContext и HelpContext в HelpID, или я могу установить HelpType в htKeyword и HelpContext в псевдоним HelpID.
Но в моей справочной системе (Dr. Explain) я установил символические имена (то есть некоторый текст, который используется в качестве закладки в моей справочной системе). Он отличается от HelpID и его псевдонима и доступен из справочной системы с помощью вызова: Application.HelpJump (SymbolicName).
Я хотел бы использовать поле HelpContext для моих символических имен, которое намного проще и проще в обслуживании, чем создание дублированного набора псевдонимов HelpID. И мне не нужно будет беспокоиться о создании файла справки или о том, как с ним работать.
Это подпрограмма HelpKeyword в модуле Forms, которая обрабатывает F1, когда HelpType имеет значение htKeyword:
function TApplication.HelpKeyword(const Keyword: string): Boolean;
var
CallHelp: Boolean;
begin
{$IF DEFINED(CLR)}
Result := DoOnHelp(HELP_COMMAND, TObject(Keyword), CallHelp);
{$ELSE}
Result := DoOnHelp(HELP_COMMAND, Integer(PChar(Keyword)), CallHelp);
{$IFEND}
if CallHelp then
begin
if ValidateHelpSystem then
begin
{ We have to asume ShowHelp worked }
Result := True;
HelpSystem.ShowHelp(Keyword, GetCurrentHelpFile);
end
else
Result := False;
end;
end;
Чтобы заставить это работать для обработки моих символических имен, все, что мне действительно нужно, это заменить подпрограмму на:
function TApplication.HelpKeyword(const Keyword: string): Boolean;
begin
Application.HelpJump(Keyword);
Result := true;
end;
То, что я не могу сделать, это выяснить, как написать правильный код для чистой настройки функциональности этой подпрограммы, без необходимости взламывать сам модуль Forms. Как я могу это сделать?
Или, альтернативно, есть ли другой способ легко получить контекстно-зависимую справку для доступа к моей странице справки на основе символического имени?
Для справки, я использую Delphi 2009 (но в следующем месяце я буду обновляться до XE2).
p.s. Слово в заголовке - «He-lp», потому что stackoverflow не позволяет мне поместить слово «Help» в заголовок.