ヘルプ システムをプログラムに組み込んでおり、F1 が押されたときにアクティブなコントロールの適切なヘルプ ページを表示するコンテキスト センシティブ ヘルプに取り組んでいます。
各コントロールで、HelpType を htContext に、HelpContext を HelpID に設定するか、HelpType を htKeyword に、HelpContext を HelpID Alias に設定できます。
しかし、私のヘルプ システム (Dr. Explain) では、記号名 (つまり、ヘルプ システムでブックマークとして使用されるテキスト) を設定しました。これは HelpID とそのエイリアスとは異なり、次の呼び出しでヘルプ システムからアクセスできます: Application.HelpJump(SymbolicName)。
HelpID エイリアスの複製セットを作成するよりもはるかに単純で維持しやすい記号名に HelpContext フィールドを使用したいと考えています。また、ヘルプ マップ ファイルの作成について心配する必要も、それに対処する必要もありません。
HelpType が htKeyword の場合に F1 を処理するのは、Forms ユニットの HelpKeyword ルーチンです。
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 にアップグレードする予定です)。
ps タイトルの単語は「He-lp」です。これは、stackoverflow ではタイトルに「ヘルプ」という単語を入れることができないためです。