自己收集整理的 DELPHI 中控制与使用HMTL帮助文件的单元代码。

 在程序里加帮助文件,是常用的方法,我一直使用以下这个单元,不过 DELPHI2007好像对HTML帮助文件的支持有所改善。但没试过,因为自己整理使用的这个单元一直很好用。所以常得有用(对使用DELPH的朋友)。所以贴出来了。

主要有以下几个函数,

//取帮助文件名
function HelpFileName: String;
//根据 ContextId 调用帮助
function ShowHelpContext(ContextId: DWord): Integer;
//根据检索字符调用帮助
function ShowHelpTopic(Topic: String): Integer;
//显示主帮助窗口
function ShowHelpWindow: Integer;
//显示主帮助窗口的索引栏
function ShowHelpIndex: Integer;
//显示主帮助窗口的搜索栏
function ShowHelpSearch: Integer;
//设置主帮助文件名
procedure SetHelpFileName(FileName: String);

例如在主程序的菜单-->帮助 中的 OnClick 事件里添加以下代码:

procedure miHelpClick(Sender: TObject);
begin
  ShowHelpWindow; //显示主帮助窗口
end;

或者在相关的控件里的帮助事件中加入

ShowHelpContext(10992); //10992 是该控件的帮助ID, 可以为任意自己定义的ID.

ShowHelpTopic('使用说明'); //'使用说明'是该控件的帮助索引, 可以为任意自己定义的字符.

代码源文件如下:

{ *******************************************************************************

   XOtecExpress Visual Component Library [陆岛工作室]
   Copyright (c) 2008 XOtec Studio.  [PengJunli]

   By: PengJunLi Build: 2008-05
   E-mail: iinsnian@126.com  XOtec@vip.QQ.com  QQ:442801172

*******************************************************************************
}

unit xtHTMLHelp;

interface

(* $HPPEMIT '' *)
(* $HPPEMIT '#include "htmlhelp.h"' *)
(* $HPPEMIT '' *)
(* $HPPEMIT 'typedef struct tagHH_LAST_ERROR' *)
(* $HPPEMIT '{' *)
(* $HPPEMIT '  int     cbStruct ;' *)
(* $HPPEMIT '  HRESULT hr ;' *)
(* $HPPEMIT '  BSTR    description ;' *)
(* $HPPEMIT ' }  HH_LAST_ERROR ; ' *)
(* $HPPEMIT '' *)

uses Classes, Windows, Sysutils, Forms, Dialogs;

{ $DEFINE HTMLHELP12 }

type
{ $IFDEF HTMLHELP12 }
{ $IFNDEF _WIN64 }
  DWORD_PTR 
=  DWORD;
{ $ENDIF }
{ $ENDIF }
  PCSTR 
=  LPCSTR;

//  Commands  to  pass  to  HtmlHelp()

const
  HH_DISPLAY_TOPIC           
=  $ 0000 ;
  
{ $EXTERNALSYM HH_DISPLAY_TOPIC }
  HH_HELP_FINDER             
=  $ 0000 ;       //  WinHelp equivalent
  
{ $EXTERNALSYM HH_HELP_FINDER }
  HH_DISPLAY_TOC             
=  $ 0001 ;       //   not  currently implemented
  
{ $EXTERNALSYM HH_DISPLAY_TOC }
  HH_DISPLAY_INDEX           
=  $ 0002 ;       //   not  currently implemented
  
{ $EXTERNALSYM HH_DISPLAY_INDEX }
  HH_DISPLAY_SEARCH          
=  $ 0003 ;       //   not  currently implemented
  
{ $EXTERNALSYM HH_DISPLAY_SEARCH }
  HH_SET_WIN_TYPE            
=  $ 0004 ;
  
{ $EXTERNALSYM HH_SET_WIN_TYPE }
  HH_GET_WIN_TYPE            
=  $ 0005 ;
  
{ $EXTERNALSYM HH_GET_WIN_TYPE }
  HH_GET_WIN_HANDLE          
=  $ 0006 ;
  
{ $EXTERNALSYM HH_GET_WIN_HANDLE }
  HH_ENUM_INFO_TYPE          
=  $ 0007 ;       //  Get Info  type  name, call repeatedly  to  enumerate,  - 1  at  end
  
{ $EXTERNALSYM HH_ENUM_INFO_TYPE }
  HH_SET_INFO_TYPE           
=  $ 0008 ;       //  Add Info  type   to  filter.
  
{ $EXTERNALSYM HH_SET_INFO_TYPE }
  HH_SYNC                    
=  $ 0009 ;
  
{ $EXTERNALSYM HH_SYNC }
{ $IFDEF HTMLHELP11 }
  HH_ADD_NAV_UI              
=  $000A;       //   not  currently implemented
  
{ $EXTERNALSYM HH_ADD_NAV_UI }
  HH_ADD_BUTTON              
=  $000B;       //   not  currently implemented
  
{ $EXTERNALSYM HH_ADD_BUTTON }
  HH_GETBROWSER_APP          
=  $000C;       //   not  currently implemented
  
{ $EXTERNALSYM HH_GETBROWSER_APP }
{ $ENDIF }
{ $IFDEF HTMLHELP12 }
  HH_RESERVED1               
=  $000A;
  
{ $EXTERNALSYM HH_RESERVED1 }
  HH_RESERVED2               
=  $000B;
  
{ $EXTERNALSYM HH_RESERVED2 }
  HH_RESERVED3               
=  $000C;
  
{ $EXTERNALSYM HH_RESERVED3 }
{ $ENDIF }
  HH_KEYWORD_LOOKUP          
=  $000D;
  
{ $EXTERNALSYM HH_KEYWORD_LOOKUP }
  HH_DISPLAY_TEXT_POPUP      
=  $000E;       //  display string resource id  or  text  in  a popup window
  
{ $EXTERNALSYM HH_DISPLAY_TEXT_POPUP }
  HH_HELP_CONTEXT            
=  $000F;       //  display mapped numeric value  in  dwData
  
{ $EXTERNALSYM HH_HELP_CONTEXT }
  HH_TP_HELP_CONTEXTMENU     
=  $ 0010 ;       //  text popup help, same as WinHelp HELP_CONTEXTMENU
  
{ $EXTERNALSYM HH_TP_HELP_CONTEXTMENU }
  HH_TP_HELP_WM_HELP         
=  $ 0011 ;       //  text popup help, same as WinHelp HELP_WM_HELP
  
{ $EXTERNALSYM HH_TP_HELP_WM_HELP }
  HH_CLOSE_ALL               
=  $ 0012 ;       //  close all windows opened directly  or  indirectly by the caller
  
{ $EXTERNALSYM HH_CLOSE_ALL }
  HH_ALINK_LOOKUP            
=  $ 0013 ;       //  ALink version  of  HH_KEYWORD_LOOKUP
  
{ $EXTERNALSYM HH_ALINK_LOOKUP }
  HH_GET_LAST_ERROR          
=  $ 0014 ;       //   not  currently implemented, See HHERROR.h
  
{ $EXTERNALSYM HH_GET_LAST_ERROR }
  HH_ENUM_CATEGORY           
=  $ 0015 ;          //  Get category name, call repeatedly  to  enumerate,  - 1  at  end
  
{ $EXTERNALSYM HH_ENUM_CATEGORY }
  HH_ENUM_CATEGORY_IT        
=  $ 0016 ;       //  Get category info  type  members, call repeatedly  to  enumerate,  - 1  at  end
  
{ $EXTERNALSYM HH_ENUM_CATEGORY_IT }
  HH_RESET_IT_FILTER         
=  $ 0017 ;       //  Clear the info  type  filter  of  all info types.
  
{ $EXTERNALSYM HH_RESET_IT_FILTER }
  HH_SET_INCLUSIVE_FILTER    
=  $ 0018 ;       //   set  inclusive filtering method  for  untyped topics  to  be included  in  display
  
{ $EXTERNALSYM HH_SET_INCLUSIVE_FILTER }
  HH_SET_EXCLUSIVE_FILTER    
=  $ 0019 ;       //   set  exclusive filtering method  for  untyped topics  to  be excluded from display
  
{ $EXTERNALSYM HH_SET_EXCLUSIVE_FILTER }
{ $IFDEF HTMLHELP11 }
  HH_SET_GUID                
=  $001A;       //  For Microsoft Installer  --  dwData is a pointer  to  the GUID string
  
{ $EXTERNALSYM HH_SET_GUID }
{ $ENDIF }
{ $IFDEF HTMLHELP12 }
  HH_INITIALIZE              
=  $001C;       //  Initializes the help system.
  
{ $EXTERNALSYM HH_INITIALIZE }
  HH_UNINITIALIZE            
=  $001D;       //  Uninitializes the help system.
  
{ $EXTERNALSYM HH_UNINITIALIZE }
  HH_PRETRANSLATEMESSAGE     
=  $00FD;       //  Pumps messages. (NULL, NULL, MSG * ).
  
{ $EXTERNALSYM HH_PRETRANSLATEMESSAGE }
  HH_SET_GLOBAL_PROPERTY     
=  $00FC;       //  Set a global property. (NULL, NULL, HH_GPROP)
  
{ $EXTERNALSYM HH_SET_GLOBAL_PROPERTY }
{ $ENDIF }

{ $IFDEF HTMLHELP11 }
  HH_INTERNAL                
=  $00FF;       //  Used internally.
  
{ $EXTERNALSYM HH_INTERNAL }
{ $ENDIF }

{ $IFDEF HTMLHELP12 }
  HHWIN_PROP_TAB_AUTOHIDESHOW 
=  ( 1  shl  0 );  //  Automatically hide / show tri - pane window
  
{ $EXTERNALSYM HHWIN_PROP_TAB_AUTOHIDESHOW }
{ $ENDIF }
  HHWIN_PROP_ONTOP           
=  ( 1  shl  1 );   //  Top - most window ( not  currently implemented)
  
{ $EXTERNALSYM HHWIN_PROP_ONTOP }
  HHWIN_PROP_NOTITLEBAR      
=  ( 1  shl  2 );   //  no title bar
  
{ $EXTERNALSYM HHWIN_PROP_NOTITLEBAR }
  HHWIN_PROP_NODEF_STYLES    
=  ( 1  shl  3 );   //  no default window styles (only HH_WINTYPE.dwStyles)
  
{ $EXTERNALSYM HHWIN_PROP_NODEF_STYLES }
  HHWIN_PROP_NODEF_EXSTYLES  
=  ( 1  shl  4 );   //  no default extended window styles (only HH_WINTYPE.dwExStyles)
  
{ $EXTERNALSYM HHWIN_PROP_NODEF_EXSTYLES }
  HHWIN_PROP_TRI_PANE        
=  ( 1  shl  5 );   //  use a tri - pane window
  
{ $EXTERNALSYM HHWIN_PROP_TRI_PANE }
  HHWIN_PROP_NOTB_TEXT       
=  ( 1  shl  6 );   //  no text on toolbar buttons
  
{ $EXTERNALSYM HHWIN_PROP_NOTB_TEXT }
  HHWIN_PROP_POST_QUIT       
=  ( 1  shl  7 );   //  post WM_QUIT message when window closes
  
{ $EXTERNALSYM HHWIN_PROP_POST_QUIT }
  HHWIN_PROP_AUTO_SYNC       
=  ( 1  shl  8 );   //  automatically ssync contents  and  index
  
{ $EXTERNALSYM HHWIN_PROP_AUTO_SYNC }
  HHWIN_PROP_TRACKING        
=  ( 1  shl  9 );   //  send tracking notification messages
  
{ $EXTERNALSYM HHWIN_PROP_TRACKING }
  HHWIN_PROP_TAB_SEARCH      
=  ( 1  shl  10 );  //  include search tab  in  navigation pane
  
{ $EXTERNALSYM HHWIN_PROP_TAB_SEARCH }
  HHWIN_PROP_TAB_HISTORY     
=  ( 1  shl  11 );  //  include history tab  in  navigation pane
  
{ $EXTERNALSYM HHWIN_PROP_TAB_HISTORY }
{ $IFDEF HTMLHELP11 }
  HHWIN_PROP_TAB_BOOKMARKS   
=  ( 1  shl  12 );  //  include bookmark tab  in  navigation pane
  
{ $EXTERNALSYM HHWIN_PROP_TAB_BOOKMARKS }
{ $ENDIF }
{ $IFDEF HTMLHELP12 }
  HHWIN_PROP_TAB_FAVORITES   
=  ( 1  shl  12 );  //  include favorites tab  in  navigation pane
  
{ $EXTERNALSYM HHWIN_PROP_TAB_FAVORITES }
{ $ENDIF }
  HHWIN_PROP_CHANGE_TITLE    
=  ( 1  shl  13 );  //  Put current HTML title  in  title bar
  
{ $EXTERNALSYM HHWIN_PROP_CHANGE_TITLE }
  HHWIN_PROP_NAV_ONLY_WIN    
=  ( 1  shl  14 );  //  Only display the navigation window
  
{ $EXTERNALSYM HHWIN_PROP_NAV_ONLY_WIN }
  HHWIN_PROP_NO_TOOLBAR      
=  ( 1  shl  15 );  //  Don ' t display a toolbar
   { $EXTERNALSYM HHWIN_PROP_NO_TOOLBAR }
  HHWIN_PROP_MENU            
=  ( 1  shl  16 );  //  Menu
  
{ $EXTERNALSYM HHWIN_PROP_MENU }
  HHWIN_PROP_TAB_ADVSEARCH   
=  ( 1  shl  17 );  //  Advanced FTS UI.
  
{ $EXTERNALSYM HHWIN_PROP_TAB_ADVSEARCH }
  HHWIN_PROP_USER_POS        
=  ( 1  shl  18 );  //  After initial creation, user controls window size / Position
  
{ $EXTERNALSYM HHWIN_PROP_USER_POS }
{ $IFDEF HTMLHELP12 }
  HHWIN_PROP_TAB_CUSTOM1     
=  ( 1  shl  19 );  //  Use custom tab # 1
  
{ $EXTERNALSYM HHWIN_PROP_TAB_CUSTOM1 }
  HHWIN_PROP_TAB_CUSTOM2     
=  ( 1  shl  20 );  //  Use custom tab # 2
  
{ $EXTERNALSYM HHWIN_PROP_TAB_CUSTOM2 }
  HHWIN_PROP_TAB_CUSTOM3     
=  ( 1  shl  21 );  //  Use custom tab # 3
  
{ $EXTERNALSYM HHWIN_PROP_TAB_CUSTOM3 }
  HHWIN_PROP_TAB_CUSTOM4     
=  ( 1  shl  22 );  //  Use custom tab # 4
  
{ $EXTERNALSYM HHWIN_PROP_TAB_CUSTOM4 }
  HHWIN_PROP_TAB_CUSTOM5     
=  ( 1  shl  23 );  //  Use custom tab # 5
  
{ $EXTERNALSYM HHWIN_PROP_TAB_CUSTOM5 }
  HHWIN_PROP_TAB_CUSTOM6     
=  ( 1  shl  24 );  //  Use custom tab # 6
  
{ $EXTERNALSYM HHWIN_PROP_TAB_CUSTOM6 }
  HHWIN_PROP_TAB_CUSTOM7     
=  ( 1  shl  25 );  //  Use custom tab # 7
  
{ $EXTERNALSYM HHWIN_PROP_TAB_CUSTOM7 }
  HHWIN_PROP_TAB_CUSTOM8     
=  ( 1  shl  26 );  //  Use custom tab # 8
  
{ $EXTERNALSYM HHWIN_PROP_TAB_CUSTOM8 }
  HHWIN_PROP_TAB_CUSTOM9     
=  ( 1  shl  27 );  //  Use custom tab # 9
  
{ $EXTERNALSYM HHWIN_PROP_TAB_CUSTOM9 }
  HHWIN_TB_MARGIN            
=  ( 1  shl  28 );  //  the window  type  has a margin
  
{ $EXTERNALSYM HHWIN_TB_MARGIN }
{ $ENDIF }

  HHWIN_PARAM_PROPERTIES     
=  ( 1  shl  1 );   //  valid fsWinProperties
  
{ $EXTERNALSYM HHWIN_PARAM_PROPERTIES }
  HHWIN_PARAM_STYLES         
=  ( 1  shl  2 );   //  valid dwStyles
  
{ $EXTERNALSYM HHWIN_PARAM_STYLES }
  HHWIN_PARAM_EXSTYLES       
=  ( 1  shl  3 );   //  valid dwExStyles
  
{ $EXTERNALSYM HHWIN_PARAM_EXSTYLES }
  HHWIN_PARAM_RECT           
=  ( 1  shl  4 );   //  valid rcWindowPos
  
{ $EXTERNALSYM HHWIN_PARAM_RECT }
  HHWIN_PARAM_NAV_WIDTH      
=  ( 1  shl  5 );   //  valid iNavWidth
  
{ $EXTERNALSYM HHWIN_PARAM_NAV_WIDTH }
  HHWIN_PARAM_SHOWSTATE      
=  ( 1  shl  6 );   //  valid nShowState
  
{ $EXTERNALSYM HHWIN_PARAM_SHOWSTATE }
  HHWIN_PARAM_INFOTYPES      
=  ( 1  shl  7 );   //  valid apInfoTypes
  
{ $EXTERNALSYM HHWIN_PARAM_INFOTYPES }
  HHWIN_PARAM_TB_FLAGS       
=  ( 1  shl  8 );   //  valid fsToolBarFlags
  
{ $EXTERNALSYM HHWIN_PARAM_TB_FLAGS }
  HHWIN_PARAM_EXPANSION      
=  ( 1  shl  9 );   //  valid fNotExpanded
  
{ $EXTERNALSYM HHWIN_PARAM_EXPANSION }
  HHWIN_PARAM_TABPOS         
=  ( 1  shl  10 );  //  valid tabpos
  
{ $EXTERNALSYM HHWIN_PARAM_TABPOS }
  HHWIN_PARAM_TABORDER       
=  ( 1  shl  11 );  //  valid taborder
  
{ $EXTERNALSYM HHWIN_PARAM_TABORDER }
  HHWIN_PARAM_HISTORY_COUNT  
=  ( 1  shl  12 );  //  valid cHistory
  
{ $EXTERNALSYM HHWIN_PARAM_HISTORY_COUNT }
  HHWIN_PARAM_CUR_TAB        
=  ( 1  shl  13 );  //  valid curNavType
  
{ $EXTERNALSYM HHWIN_PARAM_CUR_TAB }

  HHWIN_BUTTON_EXPAND        
=  ( 1  shl  1 );   //  Expand / contract button
  
{ $EXTERNALSYM HHWIN_BUTTON_EXPAND }
  HHWIN_BUTTON_BACK          
=  ( 1  shl  2 );   //  Back button
  
{ $EXTERNALSYM HHWIN_BUTTON_BACK }
  HHWIN_BUTTON_FORWARD       
=  ( 1  shl  3 );   //  Forward button
  
{ $EXTERNALSYM HHWIN_BUTTON_FORWARD }
  HHWIN_BUTTON_STOP          
=  ( 1  shl  4 );   //  Stop button
  
{ $EXTERNALSYM HHWIN_BUTTON_STOP }
  HHWIN_BUTTON_REFRESH       
=  ( 1  shl  5 );   //  Refresh button
  
{ $EXTERNALSYM HHWIN_BUTTON_REFRESH }
  HHWIN_BUTTON_HOME          
=  ( 1  shl  6 );   //  Home button
  
{ $EXTERNALSYM HHWIN_BUTTON_HOME }
  HHWIN_BUTTON_BROWSE_FWD    
=  ( 1  shl  7 );   //   not  implemented
  
{ $EXTERNALSYM HHWIN_BUTTON_BROWSE_FWD }
  HHWIN_BUTTON_BROWSE_BCK    
=  ( 1  shl  8 );   //   not  implemented
  
{ $EXTERNALSYM HHWIN_BUTTON_BROWSE_BCK }
  HHWIN_BUTTON_NOTES         
=  ( 1  shl  9 );   //   not  implemented
  
{ $EXTERNALSYM HHWIN_BUTTON_NOTES }
  HHWIN_BUTTON_CONTENTS      
=  ( 1  shl  10 );  //   not  implemented
  
{ $EXTERNALSYM HHWIN_BUTTON_CONTENTS }
  HHWIN_BUTTON_SYNC          
=  ( 1  shl  11 );  //  Sync button
  
{ $EXTERNALSYM HHWIN_BUTTON_SYNC }
  HHWIN_BUTTON_OPTIONS       
=  ( 1  shl  12 );  //  Options button
  
{ $EXTERNALSYM HHWIN_BUTTON_OPTIONS }
  HHWIN_BUTTON_PRINT         
=  ( 1  shl  13 );  //  Print button
  
{ $EXTERNALSYM HHWIN_BUTTON_PRINT }
  HHWIN_BUTTON_INDEX         
=  ( 1  shl  14 );  //   not  implemented
  
{ $EXTERNALSYM HHWIN_BUTTON_INDEX }
  HHWIN_BUTTON_SEARCH        
=  ( 1  shl  15 );  //   not  implemented
  
{ $EXTERNALSYM HHWIN_BUTTON_SEARCH }
  HHWIN_BUTTON_HISTORY       
=  ( 1  shl  16 );  //   not  implemented
  
{ $EXTERNALSYM HHWIN_BUTTON_HISTORY }
{ $IFDEF HTMLHELP11 }
  HHWIN_BUTTON_BOOKMARKS     
=  ( 1  shl  17 );  //   not  implemented
  
{ $EXTERNALSYM HHWIN_BUTTON_BOOKMARKS }
{ $ENDIF }
{ $IFDEF HTMLHELP12 }
  HHWIN_BUTTON_FAVORITES     
=  ( 1  shl  17 );  //   not  implemented
  
{ $EXTERNALSYM HHWIN_BUTTON_FAVORITES }
{ $ENDIF }
  HHWIN_BUTTON_JUMP1         
=  ( 1  shl  18 );
  
{ $EXTERNALSYM HHWIN_BUTTON_JUMP1 }
  HHWIN_BUTTON_JUMP2         
=  ( 1  shl  19 );
  
{ $EXTERNALSYM HHWIN_BUTTON_JUMP2 }
  HHWIN_BUTTON_ZOOM          
=  ( 1  shl  20 );
  
{ $EXTERNALSYM HHWIN_BUTTON_ZOOM }
  HHWIN_BUTTON_TOC_NEXT      
=  ( 1  shl  21 );
  
{ $EXTERNALSYM HHWIN_BUTTON_TOC_NEXT }
  HHWIN_BUTTON_TOC_PREV      
=  ( 1  shl  22 );
  
{ $EXTERNALSYM HHWIN_BUTTON_TOC_PREV }

  HHWIN_DEF_BUTTONS 
=  HHWIN_BUTTON_EXPAND  or  HHWIN_BUTTON_BACK  or
                      HHWIN_BUTTON_OPTIONS 
or  HHWIN_BUTTON_PRINT;
  
{ $EXTERNALSYM HHWIN_DEF_BUTTONS }

//  Button IDs

  IDTB_EXPAND       
=   200 ;
  
{ $EXTERNALSYM IDTB_EXPAND }
  IDTB_CONTRACT     
=   201 ;
  
{ $EXTERNALSYM IDTB_CONTRACT }
  IDTB_STOP         
=   202 ;
  
{ $EXTERNALSYM IDTB_STOP }
  IDTB_REFRESH      
=   203 ;
  
{ $EXTERNALSYM IDTB_REFRESH }
  IDTB_BACK         
=   204 ;
  
{ $EXTERNALSYM IDTB_BACK }
  IDTB_HOME         
=   205 ;
  
{ $EXTERNALSYM IDTB_HOME }
  IDTB_SYNC         
=   206 ;
  
{ $EXTERNALSYM IDTB_SYNC }
  IDTB_PRINT        
=   207 ;
  
{ $EXTERNALSYM IDTB_PRINT }
  IDTB_OPTIONS      
=   208 ;
  
{ $EXTERNALSYM IDTB_OPTIONS }
  IDTB_FORWARD      
=   209 ;
  
{ $EXTERNALSYM IDTB_FORWARD }
  IDTB_NOTES        
=   210 ;                  //   not  implemented
  
{ $EXTERNALSYM IDTB_NOTES }
  IDTB_BROWSE_FWD   
=   211 ;
  
{ $EXTERNALSYM IDTB_BROWSE_FWD }
  IDTB_BROWSE_BACK  
=   212 ;
  
{ $EXTERNALSYM IDTB_BROWSE_BACK }
  IDTB_CONTENTS     
=   213 ;                  //   not  implemented
  
{ $EXTERNALSYM IDTB_CONTENTS }
  IDTB_INDEX        
=   214 ;                  //   not  implemented
  
{ $EXTERNALSYM IDTB_INDEX }
  IDTB_SEARCH       
=   215 ;                  //   not  implemented
  
{ $EXTERNALSYM IDTB_SEARCH }
  IDTB_HISTORY      
=   216 ;                  //   not  implemented
  
{ $EXTERNALSYM IDTB_HISTORY }
{ $IFDEF HTMLHELP11 }
  IDTB_BOOKMARKS    
=   217 ;                  //   not  implemented
  
{ $EXTERNALSYM IDTB_BOOKMARKS }
{ $ENDIF }
{ $IFDEF HTMLHELP12 }
  IDTB_FAVORITES    
=   217 ;                  //   not  implemented
  
{ $EXTERNALSYM IDTB_FAVORITES }
{ $ENDIF }
  IDTB_JUMP1        
=   218 ;
  
{ $EXTERNALSYM IDTB_JUMP1 }
  IDTB_JUMP2        
=   219 ;
  
{ $EXTERNALSYM IDTB_JUMP2 }
  IDTB_CUSTOMIZE    
=   221 ;
  
{ $EXTERNALSYM IDTB_CUSTOMIZE }
  IDTB_ZOOM         
=   222 ;
  
{ $EXTERNALSYM IDTB_ZOOM }
  IDTB_TOC_NEXT     
=   223 ;
  
{ $EXTERNALSYM IDTB_TOC_NEXT }
  IDTB_TOC_PREV     
=   224 ;
  
{ $EXTERNALSYM IDTB_TOC_PREV }

//  Notification codes

  HHN_FIRST         
=   - 860 ;
  
{ $EXTERNALSYM HHN_FIRST }
  HHN_LAST          
=   - 879 ;
  
{ $EXTERNALSYM HHN_LAST }

  HHN_NAVCOMPLETE   
=  (HHN_FIRST  -   0 );
  
{ $EXTERNALSYM HHN_NAVCOMPLETE }
  HHN_TRACK         
=  (HHN_FIRST  -   1 );
  
{ $EXTERNALSYM HHN_TRACK }
  HHN_WINDOW_CREATE 
=  (HHN_FIRST  -   2 );
  
{ $EXTERNALSYM HHN_WINDOW_CREATE }

type
  PHHLastError 
=  ^THHLastError;
  tagHH_LAST_ERROR 
=   packed   record
    cbStruct: Integer;      
//  size  of  this structure
    hr: HRESULT;            
//  the last error code.
    description: PWideChar; 
//  a description  of  the error (unicode string  -  BSTR).
  
end ;
  THHLastError 
=  tagHH_LAST_ERROR;

  PHHNNotify 
=  ^THHNNotify;
  tagHHN_NOTIFY 
=   packed   record
    hdr: NMHDR;
    pszUrl: PCSTR;                         
//  multibyte null - terminated string
  
end ;
  
{ $EXTERNALSYM tagHHN_NOTIFY }
  HHN_NOTIFY 
=  tagHHN_NOTIFY;
  
{ $EXTERNALSYM HHN_NOTIFY }
  THHNNotify 
=  tagHHN_NOTIFY;

  PHHPopup 
=  ^THHPopup;
  tagHH_POPUP 
=   packed   record
    cbStruct: Integer;                     
//  sizeof this structure
    hinst: HINST;                          
//  instance handle  for  string resource
    idString: UINT;                        
//  string resource id,  or  text id  if  pszFile is specified  in  HtmlHelp call
    pszText: LPCTSTR;                      
//  used  if  idString is zero
    pt: TPoint;                            
//  top center  of  popup window
    clrForeGround: TColorRef;              
//  use  - 1   for  default
    clrBackground: TColorRef;               
//  use  - 1   for  default
    rcMargins: TRect;                      
//  amount  of  space between edges  of  window  and  text,  - 1   for  each member  to  ignore
    pszFont: LPCTSTR;                      
//  facename, point size, char  set , BOLD ITALIC UNDERLINE
  
end ;
  
{ $EXTERNALSYM tagHH_POPUP }
  HH_POPUP 
=  tagHH_POPUP;
  
{ $EXTERNALSYM HH_POPUP }
  THHPopup 
=  tagHH_POPUP;

  PHHAKLink 
=  ^THHAKLink;
  tagHH_AKLINK 
=   packed   record
    cbStruct: Integer;                     
//  sizeof this structure
    fReserved: BOOL;                       
//  must be FALSE (really!)
    pszKeywords: LPCTSTR;                  
//  semi - colon separated keywords
    pszUrl: LPCTSTR;                       
//  URL  to  jump  to   if  no keywords found (may be NULL)
    pszMsgText: LPCTSTR;                   
//  Message text  to  display  in  MessageBox  if  pszUrl is NULL  and  no keyword match
    pszMsgTitle: LPCTSTR;                  
//  Message text  to  display  in  MessageBox  if  pszUrl is NULL  and  no keyword match
    pszWindow: LPCTSTR;                    
//  Window  to  display URL  in
    fIndexOnFail: BOOL;                    
//  Displays index  if  keyword lookup fails.
  
end ;
  
{ $EXTERNALSYM tagHH_AKLINK }
  HH_AKLINK 
=  tagHH_AKLINK;
  
{ $EXTERNALSYM HH_AKLINK }
  THHAKLink 
=  tagHH_AKLINK;

const
  HHWIN_NAVTYPE_TOC          
=   0 ;
  
{ $EXTERNALSYM HHWIN_NAVTYPE_TOC }
  HHWIN_NAVTYPE_INDEX        
=   1 ;
  
{ $EXTERNALSYM HHWIN_NAVTYPE_INDEX }
  HHWIN_NAVTYPE_SEARCH       
=   2 ;
  
{ $EXTERNALSYM HHWIN_NAVTYPE_SEARCH }
{ $IFDEF HTMLHELP11 }
  HHWIN_NAVTYPE_BOOKMARKS    
=   3 ;
  
{ $EXTERNALSYM HHWIN_NAVTYPE_BOOKMARKS }
  HHWIN_NAVTYPE_HISTORY      
=   4 ;           // not  implemented
  
{ $EXTERNALSYM HHWIN_NAVTYPE_HISTORY }
{ $ENDIF }
{ $IFDEF HTMLHELP12 }
  HHWIN_NAVTYPE_FAVORITES    
=   3 ;
  
{ $EXTERNALSYM HHWIN_NAVTYPE_FAVORITES }
  HHWIN_NAVTYPE_HISTORY      
=   4 ;           // not  implemented
  
{ $EXTERNALSYM HHWIN_NAVTYPE_HISTORY }
  HHWIN_NAVTYPE_AUTHOR       
=   5 ;
  
{ $EXTERNALSYM HHWIN_NAVTYPE_AUTHOR }
  HHWIN_NAVTYPE_CUSTOM_FIRST 
=   11 ;
  
{ $EXTERNALSYM HHWIN_NAVTYPE_CUSTOM_FIRST }
{ $ENDIF }

  IT_INCLUSIVE 
=   0 ;
  
{ $EXTERNALSYM IT_INCLUSIVE }
  IT_EXCLUSIVE 
=   1 ;
  
{ $EXTERNALSYM IT_EXCLUSIVE }
  IT_HIDDEN    
=   2 ;
  
{ $EXTERNALSYM IT_HIDDEN }

type
  PHHEnumIT 
=  ^THHEnumIT;
  tagHH_ENUM_IT 
=   packed   record
    cbStruct: Integer;        
//  size  of  this structure
    iType: Integer;           
//  the  type   of  the information  type  ie. Inclusive, Exclusive,  or  Hidden
    pszCatName: LPCSTR;       
//  Set  to  the name  of  the Category  to  enumerate the info types  in  a category;  else  NULL
    pszITName: LPCSTR;        
//  volitile pointer  to  the name  of  the infotype. Allocated by call. Caller responsible  for  freeing
    pszITDescription: LPCSTR; 
//  volitile pointer  to  the description  of  the infotype.
  
end ;
  
{ $EXTERNALSYM tagHH_ENUM_IT }
  HH_ENUM_IT 
=  tagHH_ENUM_IT;
  
{ $EXTERNALSYM HH_ENUM_IT }
  PHH_ENUM_IT 
=  ^tagHH_ENUM_IT;
  
{ $EXTERNALSYM PHH_ENUM_IT }
  THHEnumIT 
=  tagHH_ENUM_IT;

  PHHEnumCat 
=  ^THHEnumCat;
  tagHH_ENUM_CAT 
=   packed   record
    cbStruct: Integer;         
//  size  of  this structure
    pszCatName: LPCSTR;        
//  volitile pointer  to  the category name
    pszCatDescription: LPCSTR; 
//  volitile pointer  to  the category description
  
end ;
  
{ $EXTERNALSYM tagHH_ENUM_CAT }
  HH_ENUM_CAT 
=  tagHH_ENUM_CAT;
  
{ $EXTERNALSYM HH_ENUM_CAT }
  PHH_ENUM_CAT 
=  ^tagHH_ENUM_CAT;
  
{ $EXTERNALSYM PHH_ENUM_CAT }
  THHEnumCat 
=  tagHH_ENUM_CAT;

  PHHSetInfoType 
=  ^THHSetInfoType;
  tagHH_SET_INFOTYPE 
=   packed   record
    cbStruct: Integer;        
//  the size  of  this structure
    pszCatName: LPCSTR;       
//  the name  of  the category,  if  any, the InfoType is a member  of .
    pszInfoTypeName: LPCSTR;  
//  the name  of  the info  type   to  add  to  the filter
  
end ;
  
{ $EXTERNALSYM tagHH_SET_INFOTYPE }
  HH_SET_INFOTYPE 
=  tagHH_SET_INFOTYPE;
  
{ $EXTERNALSYM HH_SET_INFOTYPE }
  PHH_SET_INFOTYPE 
=  ^tagHH_SET_INFOTYPE;
  
{ $EXTERNALSYM PHH_SET_INFOTYPE }
  THHSetInfoType 
=  tagHH_SET_INFOTYPE;

  HH_INFOTYPE 
=  DWORD;
  
{ $EXTERNALSYM HH_INFOTYPE }
  PHH_INFOTYPE 
=  ^HH_INFOTYPE;
  
{ $EXTERNALSYM PHH_INFOTYPE }
  PHHInfoType 
=  ^THHInfoType;
  THHInfoType 
=  HH_INFOTYPE;

const
  HHWIN_NAVTAB_TOP    
=   0 ;
  
{ $EXTERNALSYM HHWIN_NAVTAB_TOP }
  HHWIN_NAVTAB_LEFT   
=   1 ;
  
{ $EXTERNALSYM HHWIN_NAVTAB_LEFT }
  HHWIN_NAVTAB_BOTTOM 
=   2 ;
  
{ $EXTERNALSYM HHWIN_NAVTAB_BOTTOM }

  HH_MAX_TABS         
=   19 ;
  
{ $EXTERNALSYM HH_MAX_TABS }

  HH_TAB_CONTENTS     
=   0 ;
  
{ $EXTERNALSYM HH_TAB_CONTENTS }
  HH_TAB_INDEX        
=   1 ;
  
{ $EXTERNALSYM HH_TAB_INDEX }
  HH_TAB_SEARCH       
=   2 ;
  
{ $EXTERNALSYM HH_TAB_SEARCH }
{ $IFDEF HTMLHELP11 }
  HH_TAB_BOOKMARKS    
=   3 ;
  
{ $EXTERNALSYM HH_TAB_BOOKMARKS }
  HH_TAB_HISTORY      
=   4 ;
  
{ $EXTERNALSYM HH_TAB_HISTORY }
{ $ENDIF }
{ $IFDEF HTMLHELP12 }
  HH_TAB_FAVORITES    
=   3 ;
  
{ $EXTERNALSYM HH_TAB_FAVORITES }
  HH_TAB_HISTORY      
=   4 ;
  
{ $EXTERNALSYM HH_TAB_HISTORY }
  HH_TAB_AUTHOR       
=   5 ;
  
{ $EXTERNALSYM HH_TAB_AUTHOR }

  HH_TAB_CUSTOM_FIRST 
=   11 ;
  
{ $EXTERNALSYM HH_TAB_CUSTOM_FIRST }
  HH_TAB_CUSTOM_LAST  
=  HH_MAX_TABS;
  
{ $EXTERNALSYM HH_TAB_CUSTOM_LAST }

  HH_MAX_TABS_CUSTOM  
=  HH_TAB_CUSTOM_LAST  -  HH_TAB_CUSTOM_FIRST  +   1 ;
  
{ $EXTERNALSYM HH_MAX_TABS_CUSTOM }
{ $ENDIF }

//  HH_DISPLAY_SEARCH Command Related Structures  and  Constants

  HH_FTS_DEFAULT_PROXIMITY 
=   - 1 ;
  
{ $EXTERNALSYM HH_FTS_DEFAULT_PROXIMITY }

type
  PHHFtsQuery 
=  ^THHFtsQuery;
  tagHH_FTS_QUERY 
=   packed   record
    cbStruct: Integer;         
//  Sizeof structure  in  bytes.
    fUniCodeStrings: BOOL;     
//  TRUE  if  all strings are unicode.
    pszSearchQuery: LPCTSTR;   
//  String containing the search query.
    iProximity: LongInt;       
//  Word proximity.
    fStemmedSearch: BOOL;      
//  TRUE  for  StemmedSearch only.
    fTitleOnly: BOOL;          
//  TRUE  for  Title search only.
    fExecute: BOOL;            
//  TRUE  to  initiate the search.
    pszWindow: LPCTSTR;        
//  Window  to  display  in
  
end ;
  
{ $EXTERNALSYM tagHH_FTS_QUERY }
  HH_FTS_QUERY 
=  tagHH_FTS_QUERY;
  
{ $EXTERNALSYM HH_FTS_QUERY }
  THHFtsQuery 
=  tagHH_FTS_QUERY;

  PHHWinType 
=  ^THHWinType;
  tagHH_WINTYPE 
=   packed   record
    cbStruct: Integer;      
//  IN: size  of  this structure including all Information Types
    fUniCodeStrings: BOOL;  
//  IN / OUT: TRUE  if  all strings are  in  UNICODE
    pszType: LPCTSTR;       
//  IN / OUT: Name  of  a  type   of  window
    fsValidMembers: DWORD;  
//  IN: Bit flag  of  valid members (HHWIN_PARAM_)
    fsWinProperties: DWORD; 
//  IN / OUT: Properties / attributes  of  the window (HHWIN_)

    pszCaption: LPCTSTR;    
//  IN / OUT: Window title
    dwStyles: DWORD;        
//  IN / OUT: Window styles
    dwExStyles: DWORD;      
//  IN / OUT: Extended Window styles
    rcWindowPos: TRect;     
//  IN: Starting position, OUT: current position
    nShowState: Integer;    
//  IN: show state (e.g., SW_SHOW)

    hwndHelp: HWND;         
//  OUT: window handle
    hwndCaller: HWND;       
//  OUT: who called this window

    paInfoTypes: PHHInfoType; 
//  IN: Pointer  to  an  array   of  Information Types

    
{  The following members are only valid if HHWIN_PROP_TRI_PANE is set  }

    hwndToolBar: HWND;      
//  OUT: toolbar window  in  tri - pane window
    hwndNavigation: HWND;   
//  OUT: navigation window  in  tri - pane window
    hwndHTML: HWND;         
//  OUT: window displaying HTML  in  tri - pane window
    iNavWidth: Integer;     
//  IN / OUT: width  of  navigation window
    rcHTML: TRect;          
//  OUT: HTML window coordinates

    pszToc: LPCTSTR;        
//  IN: Location  of  the table  of  contents  file
    pszIndex: LPCTSTR;      
//  IN: Location  of  the index  file
    pszFile: LPCTSTR;       
//  IN: Default location  of  the html  file
    pszHome: LPCTSTR;       
//  IN / OUT: html  file   to  display when Home button is clicked
    fsToolBarFlags: DWORD;  
//  IN: flags controling the appearance  of  the toolbar
    fNotExpanded: BOOL;     
//  IN: TRUE / FALSE  to  contract  or  expand, OUT: current state
    curNavType: Integer;    
//  IN / OUT: UI  to  display  in  the navigational pane
    tabpos: Integer;        
//  IN / OUT: HHWIN_NAVTAB_TOP, HHWIN_NAVTAB_LEFT,  or  HHWIN_NAVTAB_BOTTOM
    idNotify: Integer;      
//  IN: ID  to  use  for  WM_NOTIFY messages
    tabOrder: 
array [ 0 ..HH_MAX_TABS]  of  Byte;  //  IN / OUT: tab order: Contents, Index, Search, History, Favorites, Reserved  1 - 5 , Custom tabs
    cHistory: Integer;      
//  IN / OUT: number  of  history items  to  keep (default is  30 )
    pszJump1: LPCTSTR;      
//  Text  for  HHWIN_BUTTON_JUMP1
    pszJump2: LPCTSTR;      
//  Text  for  HHWIN_BUTTON_JUMP2
    pszUrlJump1: LPCTSTR;   
//  URL  for  HHWIN_BUTTON_JUMP1
    pszUrlJump2: LPCTSTR;   
//  URL  for  HHWIN_BUTTON_JUMP2
    rcMinSize: TRect;       
//  Minimum size  for  window (ignored  in  version  1 )
    cbInfoTypes: Integer;   
//  size  of  paInfoTypes;
{ $IFDEF HTMLHELP12 }
    pszCustomTabs: LPCTSTR; 
//  multiple zero - terminated Strings
{ $ENDIF }
  
end ;
  
{ $EXTERNALSYM tagHH_WINTYPE }
  HH_WINTYPE 
=  tagHH_WINTYPE;
  
{ $EXTERNALSYM HH_WINTYPE }
  PHH_WINTYPE 
=  ^tagHH_WINTYPE;
  
{ $EXTERNALSYM PHH_WINTYPE }
  THHWinType 
=  tagHH_WINTYPE;

const
  HHACT_TAB_CONTENTS  
=   0 ;
  
{ $EXTERNALSYM HHACT_TAB_CONTENTS }
  HHACT_TAB_INDEX     
=   1 ;
  
{ $EXTERNALSYM HHACT_TAB_INDEX }
  HHACT_TAB_SEARCH    
=   2 ;
  
{ $EXTERNALSYM HHACT_TAB_SEARCH }
  HHACT_TAB_HISTORY   
=   3 ;
  
{ $EXTERNALSYM HHACT_TAB_HISTORY }
  HHACT_TAB_FAVORITES 
=   4 ;
  
{ $EXTERNALSYM HHACT_TAB_FAVORITES }
  HHACT_EXPAND        
=   5 ;
  
{ $EXTERNALSYM HHACT_EXPAND }
  HHACT_CONTRACT      
=   6 ;
  
{ $EXTERNALSYM HHACT_CONTRACT }
  HHACT_BACK          
=   7 ;
  
{ $EXTERNALSYM HHACT_BACK }
  HHACT_FORWARD       
=   8 ;
  
{ $EXTERNALSYM HHACT_FORWARD }
  HHACT_STOP          
=   9 ;
  
{ $EXTERNALSYM HHACT_STOP }
  HHACT_REFRESH       
=   10 ;
  
{ $EXTERNALSYM HHACT_REFRESH }
  HHACT_HOME          
=   11 ;
  
{ $EXTERNALSYM HHACT_HOME }
  HHACT_SYNC          
=   12 ;
  
{ $EXTERNALSYM HHACT_SYNC }
  HHACT_OPTIONS       
=   13 ;
  
{ $EXTERNALSYM HHACT_OPTIONS }
  HHACT_PRINT         
=   14 ;
  
{ $EXTERNALSYM HHACT_PRINT }
  HHACT_HIGHLIGHT     
=   15 ;
  
{ $EXTERNALSYM HHACT_HIGHLIGHT }
  HHACT_CUSTOMIZE     
=   16 ;
  
{ $EXTERNALSYM HHACT_CUSTOMIZE }
  HHACT_JUMP1         
=   17 ;
  
{ $EXTERNALSYM HHACT_JUMP1 }
  HHACT_JUMP2         
=   18 ;
  
{ $EXTERNALSYM HHACT_JUMP2 }
  HHACT_ZOOM          
=   19 ;
  
{ $EXTERNALSYM HHACT_ZOOM }
  HHACT_TOC_NEXT      
=   20 ;
  
{ $EXTERNALSYM HHACT_TOC_NEXT }
  HHACT_TOC_PREV      
=   21 ;
  
{ $EXTERNALSYM HHACT_TOC_PREV }
  HHACT_NOTES         
=   22 ;
  
{ $EXTERNALSYM HHACT_NOTES }
  HHACT_LAST_ENUM     
=   23 ;
  
{ $EXTERNALSYM HHACT_LAST_ENUM }

type
  PHHNTrack 
=  ^THHNTrack;
  tagHHNTRACK 
=   packed   record
    hdr: NMHDR;
    pszCurUrl: PCSTR;        
//  Multi - byte, null - terminated string
    idAction: Integer;       
//  HHACT_ value
    phhWinType: PHHWinType;  
//  Current window  type  structure
  
end ;
  
{ $EXTERNALSYM tagHHNTRACK }
  HHNTRACK 
=  tagHHNTRACK;
  
{ $EXTERNALSYM HHNTRACK }
  THHNTrack 
=  tagHHNTRACK;

{ $IFDEF HTMLHELP_DYNAMIC_LINK }
type
  THtmlHelpA 
=   function  (hwndCaller: HWND; pszFile: PAnsiChar; uCommand: UINT;
    
{ $IFDEF HTMLHELP11 } dwData: DWORD): HWND; stdcall; { $ENDIF }
    
{ $IFDEF HTMLHELP12 } dwData: DWORD_PTR): HWND; stdcall; { $ENDIF }
  THtmlHelpW 
=   function  (hwndCaller: HWND; pszFile: PWideChar; uCommand: UINT;
    
{ $IFDEF HTMLHELP11 } dwData: DWORD): HWND; stdcall; { $ENDIF }
    
{ $IFDEF HTMLHELP12 } dwData: DWORD_PTR): HWND; stdcall; { $ENDIF }
  THtmlHelp 
=  THtmlHelpA;

var
  HtmlHelpA: THtmlHelpA 
=   nil ;
  HtmlHelpW: THtmlHelpW 
=   nil ;
  HtmlHelp: THtmlHelp 
=   nil ;
{ $ELSE }
function  HtmlHelpA(hwndCaller: HWND; pszFile: PAnsiChar; uCommand: UINT;
{ $IFDEF HTMLHELP11 }
  dwData: DWORD): HWND; stdcall;
{ $ENDIF }
{ $IFDEF HTMLHELP12 }
  dwData: DWORD_PTR): HWND; stdcall;
{ $ENDIF }
{ $EXTERNALSYM HtmlHelpA }
function  HtmlHelpW(hwndCaller: HWND; pszFile: PWideChar; uCommand: UINT;
{ $IFDEF HTMLHELP11 }
  dwData: DWORD): HWND; stdcall;
{ $ENDIF }
{ $IFDEF HTMLHELP12 }
  dwData: DWORD_PTR): HWND; stdcall;
{ $ENDIF }
{ $EXTERNALSYM HtmlHelpW }
function  HtmlHelp(hwndCaller: HWND; pszFile: PChar; uCommand: UINT;
{ $IFDEF HTMLHELP11 }
  dwData: DWORD): HWND; stdcall;
{ $ENDIF }
{ $IFDEF HTMLHELP12 }
  dwData: DWORD_PTR): HWND; stdcall;
{ $ENDIF }
{ $EXTERNALSYM HtmlHelp }
{ $ENDIF }

//  Use the following  for  GetProcAddress  to  load from hhctrl.ocx

const
  ATOM_HTMLHELP_API_ANSI    
=  LPTSTR(DWORD(WORD( 14 )));
  
{ $EXTERNALSYM ATOM_HTMLHELP_API_ANSI }
  ATOM_HTMLHELP_API_UNICODE 
=  LPTSTR(DWORD(WORD( 15 )));
  
{ $EXTERNALSYM ATOM_HTMLHELP_API_UNICODE }

{ $IFDEF HTMLHELP12 }
//  Global Control Properties

const
  HH_GPROPID_SINGLETHREAD     
=   1 //  VARIANT_BOOL: True  for  single thread
  
{ $EXTERNALSYM HH_GPROPID_SINGLETHREAD }
  HH_GPROPID_TOOLBAR_MARGIN   
=   2 //  long: Provides a left / right margin around the toolbar.
  
{ $EXTERNALSYM HH_GPROPID_TOOLBAR_MARGIN }
  HH_GPROPID_UI_LANGUAGE      
=   3 //  long: LangId  of  the UI.
  
{ $EXTERNALSYM HH_GPROPID_UI_LANGUAGE }
  HH_GPROPID_CURRENT_SUBSET   
=   4 //  BSTR: Current subset.
  
{ $EXTERNALSYM HH_GPROPID_CURRENT_SUBSET }
  HH_GPROPID_CONTENT_LANGUAGE 
=   5 //  long: LandId  for  desired content.
  
{ $EXTERNALSYM HH_GPROPID_CONTENT_LANGUAGE }

type
  HH_GPROPID 
=  HH_GPROPID_SINGLETHREAD..HH_GPROPID_CONTENT_LANGUAGE;
  
{ $EXTERNALSYM HH_GPROPID }
  THHGPropID 
=  HH_GPROPID;

//  Global Property structure

  PHHGlobalProperty 
=  ^THHGlobalProperty;
  tagHH_GLOBAL_PROPERTY 
=   record
    id: THHGPropID;
    Dummy: Integer;                        
//  JEDI: Added  to  enforce  8 - byte packing
    
var _: OleVariant;
  
end ;
  HH_GLOBAL_PROPERTY 
=  tagHH_GLOBAL_PROPERTY;
  THHGlobalProperty 
=  tagHH_GLOBAL_PROPERTY;
{ $ENDIF }

{ $IFDEF HTMLHELP_DYNAMIC_LINK }
function  HtmlHelpLoaded: Boolean;
{ $IFDEF HTMLHELP_DYNAMIC_LINK_EXPLICIT }
function  LoadHtmlHelp: Boolean;
function  UnLoadHtmlHelp: Boolean;
{ $ENDIF }
{ $ENDIF }

type
  THtmlHelp 
=  class(TComponent)
  private
    FOldHelpEvent: THelpEvent;
    FFileName: String;
    FWinDef: String;

    
function  GetFileName: String;
    
function  HelpFunc(Command : Word; Data : Longint; Var CallHelp : Boolean) : Boolean;
    
function  GetHHString(Topic: String): String;
  protected
    
function  DoHtmlHelp(uCommand: UINT; dwData: DWORD): HWND;
  public
    constructor Create(AOwner:TComponent);override;
    destructor Destroy; override;

    
function  HelpContext(ContextId: DWord): Integer;
    
function  HelpTopic(Topic: String): Integer;
    
function  ShowIndex:integer;
    
function  ShowTableofContents:integer;
    
function  ShowSearch:integer;
  published
    property FileName: String read GetFileName write FFileName;
    property WinDef: String read FWindef write fWindef;
  
end ;

// 取帮助文件名
function  HelpFileName: String;
// 根据 ContextId 调用帮助
function  ShowHelpContext(ContextId: DWord): Integer;
// 根据检索字符调用帮助
function  ShowHelpTopic(Topic: String): Integer;
// 显示主帮助窗口
function  ShowHelpWindow: Integer;
// 显示主帮助窗口的索引栏
function  ShowHelpIndex: Integer;
// 显示主帮助窗口的搜索栏
function  ShowHelpSearch: Integer;
// 设置主帮助文件名
procedure  SetHelpFileName(FileName: String);

var
  Helper: THtmlHelp;

implementation

procedure  CheckHelper;
begin
  
if   not  Assigned(Helper)  then
    Helper :
=  THtmlHelp.Create(Application);
end ;

procedure  SetHelpFileName(FileName: String);
begin
  CheckHelper;
  Helper.FileName :
=  FileName;
end ;

function  HelpFileName: String;
begin
  CheckHelper;
  Result :
=  Helper.FileName;
end ;

function  ShowHelpTopic(Topic: String): Integer;
begin
  CheckHelper;
  Result :
=  Helper.HelpTopic(Topic);
end ;

function  ShowHelpContext(ContextId: DWord): Integer;
begin
  CheckHelper;
  Result :
=  Helper.HelpContext(ContextID);
end ;

function  ShowHelpWindow: Integer;
begin
  CheckHelper;
  Result :
=  Helper.ShowTableofContents;
end ;

function  ShowHelpSearch: Integer;
begin
  CheckHelper;
  Result :
=  Helper.ShowSearch;
end ;

function  ShowHelpIndex: Integer;
begin
  CheckHelper;
  Result :
=  Helper.ShowIndex;
end ;


{ $IFDEF HTMLHELP_DYNAMIC_LINK }
uses
  Registry, SysUtils;

var
  HtmlHelpLib: THandle 
=   0 ;

function  GetOCXPath( var  Path: string): Boolean;
const
  HHPathRegKey 
=   ' CLSID/{adb880a6-d8ff-11cf-9377-00aa003b7a11}/InprocServer32 ' ;
begin
  
with  TRegistry.Create  do
  try
    RootKey :
=  HKEY_CLASSES_ROOT;
    
if  OpenKeyReadOnly(HHPathRegKey)  then  Path : =  ReadString( '' );
    Result :
=  (Path  <>   '' and  FileExists(Path);
  finally
    Free;
  
end ;
end ;

function  HtmlHelpLoaded: Boolean;
begin
  Result :
=  HtmlHelpLib  <>   0 ;
end ;

function  UnLoadHtmlHelp: Boolean;
begin
  Result :
=  True;
  
if  HtmlHelpLoaded  then
  
begin
    
if  Assigned(HtmlHelp)  then  HtmlHelp( 0 nil , HH_CLOSE_ALL,  0 );
    Result :
=  FreeLibrary(HtmlHelpLib);
    HtmlHelpLib :
=   0 ;
    @HtmlHelpA :
=   nil ;
    @HtmlHelpW :
=   nil ;
    @HtmlHelp :
=   nil ;
  
end ;
end ;

function  LoadHtmlHelp: Boolean;
const
  ProcNameA 
=   ' HtmlHelpA ' ;
  ProcNameW 
=   ' HtmlHelpW ' ;
  ProcName 
=  ProcNameA;
var
  HHOCXPath: string;
begin
  Result :
=  HtmlHelpLoaded;
  
if  ( not  Result)  and  GetOCXPath(HHOCXPath)  then
  
begin
    HtmlHelpLib :
=  LoadLibrary(PChar(HHOCXPath));
    
if  HtmlHelpLoaded  then
    
begin
      @HtmlHelpA :
=  GetProcAddress(HtmlHelpLib, ProcNameA);
      @HtmlHelpW :
=  GetProcAddress(HtmlHelpLib, ProcNameW);
      @HtmlHelp  :
=  GetProcAddress(HtmlHelpLib, ProcName);
      Result :
=  Assigned(HtmlHelpA)  and  Assigned(HtmlHelpW);
      
if   not  Result  then  UnLoadHtmlHelp;
    
end ;
  
end ;
end ;
{ $ELSE }
const
  hhctrl 
=   ' hhctrl.ocx ' ;

function  HtmlHelpA; external hhctrl Name  ' HtmlHelpA ' ;
{ $EXTERNALSYM HtmlHelpA }
function  HtmlHelpW; external hhctrl Name  ' HtmlHelpW ' ;
{ $EXTERNALSYM HtmlHelpW }
function  HtmlHelp; external hhctrl Name  ' HtmlHelpA ' ;
{ $EXTERNALSYM HtmlHelp }
{ $ENDIF }

{  THTMLHelp  }

constructor THTMLHelp.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  FFileName :
=   '' ;
  FWinDef :
=   '' ;

  FOldHelpEvent :
=  Application.OnHelp;
  
if   not  (csdesigning  in  ComponentState)  then  Application.OnHelp : =  HelpFunc;
end ;

destructor THTMLHelp.Destroy;
begin
  Application.OnHelp :
=  FOldHelpEvent;
  inherited destroy;
end ;

function  THtmlHelp.getHHString(Topic: String): String;
begin
  Result :
=  FileName;
  
if  Length(Topic) > 0   then
    Result :
=  Result  +   ' :: '   +  Topic;
  
if  Length(WinDef) > 0   then
    Result :
=  Result  +   ' > '   +  WinDef;
end ;

function  THTMLHelp.HelpFunc(Command : Word; Data : Longint; Var CallHelp : Boolean) : Boolean;
begin
  CallHelp :
=  False;
  
if  (Command  in  [Help_Context, Help_ContextPopup])  then
  
begin
    CallHelp :
=  false;
    HelpContext( Data );
  
end
  
else   if  Command = HELP_Finder  then
     DoHtmlHelp(HH_DISPLAY_TOC, 
0 );
  Result :
=  true;
end ;

function  THTMLHelp.DoHtmlHelp(uCommand: UINT; dwData: DWORD): HWND;
begin
  
if  (FileName = '' or   not  FileExists(FileName)  then  Exit;
  Result :
=  HtmlHelp(Application.Handle, PChar(GetHHString( '' )), uCommand, dwData);
end ;

function  THTMLHelp.GetFileName: String;
begin
  
if   not  (csdesigning  in  componentstate)  then
  
begin
    
if  FFileName = ''   then  FFileName : =  Application.Helpfile;

    
if  ExtractFilePath(FFileName) = ''   then
      FFileName:
=  ExtractFilePath(Application.Exename)  +  FFileName;

    
if   not  FileExists(FFileName)  then
      FFileName :
=  ExtractFilePath(Application.Exename)  +   ' help.chm ' ;
  
end ;
  Result :
=  FFileName;
end ;

function  THTMLHelp.HelpContext(ContextId: DWord): Integer;
begin
  Result :
=  DoHtmlHelp(HH_HELP_CONTEXT, ContextID);
end ;

function  THTMLHelp.HelpTopic(Topic: String): Integer;
begin
  Result :
=  DoHtmlHelp(HH_DISPLAY_TOPIC,  0 );
end ;

function  THTMLHelp.ShowIndex: Integer;
begin
  Result :
=  DoHtmlHelp(HH_DISPLAY_INDEX,  0 );
end ;

function  THTMLHelp.ShowTableofContents: Integer;
begin
  Result :
=  DoHtmlHelp(HH_DISPLAY_TOC,  0 );
end ;

function  THTMLHelp.ShowSearch: integer;
var
  q:THHFTSQUERY;
begin
  q.cbStruct:
= sizeof(q);
  q.fUniCodeStrings:
= false;
  q.pszSearchQuery:
= nil ;
  q.iProximity:
= HH_FTS_DEFAULT_PROXIMITY;
  q.fStemmedSearch   :
=  FALSE ;
  q.fTitleOnly       :
=  FALSE ;
  q.fExecute         :
=  True ;
  q.pszWindow        :
=   nil  ;


  Result :
=  DoHtmlHelp(HH_DISPLAY_SEARCH, DWord(@q));
end ;

{ $IFDEF HTMLHELP_DYNAMIC_LINK }
initialization
{ $IFNDEF HTMLHELP_DYNAMIC_LINK_EXPLICIT }
  LoadHtmlHelp;
{ $ENDIF }
finalization
  UnLoadHtmlHelp;
  
if  Assigned(Helper)  then  Helper.Free;
{ $ENDIF }

end .
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值