ヘルプ システム オブジェクトの登録
アプリケーションでヘルプを使用可能にする への移動
ICustomHelpViewer、IExtendedHelpViewer、ISpecialWinHelpViewer、IHelpSelector を実装するヘルプ システム オブジェクトは、ヘルプ マネージャに登録されることで、ヘルプ マネージャが、これらヘルプ システム オブジェクトと通信することができるようになります。
ヘルプ システムオブジェクトをヘルプ マネージャに登録するには、以下の作業が必要です。
- ヘルプ ビューアの登録
- ヘルプ セレクタの登録
ヘルプ ビューアの登録
ヘルプ システム オブジェクトの実装を保有するユニットは、System.HelpIntfs を使用しなければなりません。実装ユニットの var セクションで、そのオブジェクトのインスタンスを宣言する必要があります。
実装ユニットの initialization セクションでは、インスタンス変数を割り当て、それを System.HelpIntfs.RegisterViewer 関数に渡さなければなりません。RegisterViewer は、HelpIntfs ユニットからエクスポートされた、フラットなグローバル関数で、ICustomHelpViewer を引数に取り、System.HelpIntfs.IHelpManager を返します。IHelpManager は、後で使用できるように保存しておきます。
たとえば、VCL ライブラリには、Windows の HTMLHelp ヘルプ ビューアをベースにヘルプ ビューアを実装した、Vcl.HtmlHelpViewer ユニットが提供されています。(HTMLHelp 関数については MSDN ライブラリを参照してください)。 Vcl.HtmlHelpViewer ユニットの initialization セクションでは、ヘルプ ビューア インスタンスを作成します。
HelpViewer := THTMLHelpViewer.Create;
ここで、THtmlHelpViewer.Create コンストラクタは HelpViewerIntf
ヘルプ ビューア オブジェクトを内部的に生成します。 この THtmlHelpViewer クラスは Vcl.HtmlHelpViewer ユニットの implementation セクションの内部で定義されています。 THtmlHelpViewer クラスには、HelpIntfs に定義されている、ヘルプ ビューアに必要なインターフェイスがすべて実装されています。 生成されたオブジェクトは HelpViewer
変数に保存されます。 次の行では、グローバル関数 System.HelpIntfs.RegisterViewer を呼び出し、作成した HelpViewerIntf
ヘルプ ビューア オブジェクトをこの関数に渡しています:
HelpIntfs.RegisterViewer(HelpViewerIntf, HelpViewer.FHelpManager);
RegisterViewer は、作成したヘルプ ビューアを登録し、ヘルプ マネージャ HelpViewer.FHelpManager
を返します。 後から、グローバル関数 System.HelpIntfs.GetHelpSystem を他のユニットから呼び出して、登録されたヘルプ ビューアの Help メソッドにアクセスすることができます。 このようにすると、System.HelpIntfs.ICustomHelpViewer インターフェイス(や HelpIntfs の他のインターフェイス)で宣言され THtmlHelpViewer クラスで実装された、すべてのメソッドの実装にアクセスすることができます。
上記のヘルプ ビューアを登録する C++ コードは、たとえば、以下のようになります。
void InitServices()
{
THelpImplementor GlobalClass;
Global = dynamic_cast<ICustomHelpViewer*>(GlobalClass);
Global->AddRef;
HelpIntfs::RegisterViewer(Global, GlobalClass->Manager);
}
#pragma startup InitServices
ヘルプ セレクタの登録
オブジェクトの実装を保有するユニットは、VCL Forms を使用しなければなりません。 実装ユニットの var セクションで、そのオブジェクトのインスタンスを宣言する必要があります。
実装ユニットの initialization セクションでは、グローバルな Application オブジェクトの HelpSystem プロパティを介して、ヘルプ セレクタを登録する必要があります。
Application.HelpSystem.AssignHelpSelector(myHelpSelectorInstance)
Application->HelpSystem->AssignHelpSelector(myHelpSelectorInstance)
この手続きは値を返しません。