hh.exe (HtmlHelp Viewer) 閱讀,無需額外安裝。.hhp 專案檔 → 產生 .chm。Html Help Sample in Delphi[卡夫].chm、跟我學HtmlHelp Workshop[馮惠軍].chm。.hhp [MAP] 區段定義)。DWORD_PTR 作為 dwData 參數,指定 Topic ID。// BCB (包含 htmlhelp.h,連結 htmlhelp.lib)
#include
#pragma comment(lib, "htmlhelp.lib")
// Delphi
function HtmlHelp(hwndCaller: HWND; pszFile: PChar; uCommand: UINT; dwData: DWORD_PTR): HWND; stdcall;
external 'hhctrl.ocx' name 'HtmlHelpA';
| 命令 | uCommand | dwData | 說明 |
|---|---|---|---|
| 顯示主題 | HH_DISPLAY_TOPIC (0x0000) | Topic ID (DWORD) | 打開指定主題 |
| 顯示索引 | HH_DISPLAY_INDEX (0x0001) | 關鍵字字串指標 | 跳轉至索引頁 |
| 全文搜尋 | HH_DISPLAY_SEARCH (0x0002) | 搜尋字串指標 | 開啟搜尋標籤 |
| 關鍵字查找 | HH_KEYWORD_LOOKUP (0x000D) | 關鍵字字串指標 | 同步索引/搜尋 |
| 關閉說明 | HH_CLOSE_ALL (0x0012) | 0 | 關閉所有說明視窗 |
// 表單建立時指定說明檔
void __fastcall TForm1::FormCreate(TObject *Sender) {
Application->HelpFile = ExtractFilePath(Application->ExeName) + "MyApp.chm";
}
// 按鈕點擊打開特定主題 (Topic ID = 1001)
void __fastcall TForm1::btnHelpTopicClick(TObject *Sender) {
HtmlHelp(Handle, Application->HelpFile.c_str(), HH_DISPLAY_TOPIC, 1001);
}
// 功能表項目 F1 說明
void __fastcall TForm1::mnuHelpContentsClick(TObject *Sender) {
HtmlHelp(Handle, Application->HelpFile.c_str(), HH_DISPLAY_TOPIC, 0); // 目錄頁
}
// 表單關閉時關閉說明視窗
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) {
HtmlHelp(Handle, Application->HelpFile.c_str(), HH_CLOSE_ALL, 0);
}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.HelpFile := ExtractFilePath(Application.ExeName) + 'MyApp.chm';
end;
procedure TForm1.btnHelpTopicClick(Sender: TObject);
begin
HtmlHelp(Handle, PChar(Application.HelpFile), HH_DISPLAY_TOPIC, 1001);
end;
在 .hhp [MAP] 定義:
[MAP]
#define ID_HELP_MAIN 1000
#define ID_HELP_SETTINGS 1001
#define ID_HELP_ABOUT 1002
// 對應控件 HelpContext 屬性
設定控件 HelpContext = ID_HELP_SETTINGS,啟用 Application.OnHelp 事件處理 F1/Help 按鈕。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions MaxAllowedZone = 1 (本機內部網路)。.hhp 指定正確字符集。hhctrl.ocx (System32),API 宣告用 DWORD_PTR / LPARAM。