{******************************************************************************}
{                                                                              }
{ HTML Help API interface Unit for Object Pascal                               }
{                                                                              }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
{ Corporation. All Rights Reserved.                                            }
{                                                                              }
{ The original file is: htmlhelp.h, released July 2000. The original Pascal    }
{ code is: HtmlHelp.pas, released September 2000. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl).               }
{                                                                              }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
{ Marcel van Brakel. All Rights Reserved.                                      }
{                                                                              }
{ Contributor(s): Robert Chandler  (robert att helpware dott net)              }
{                 Kurt Senfer (ks att siemens dott dk)                         }
{                                                                              }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
{                                                                              }
{ You may retrieve the latest version of this file at the Project JEDI         }
{ APILIB home page, located at http://jedi-apilib.sourceforge.net              }
{                                                                              }
{ The contents of this file are used with permission, subject to the Mozilla   }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at      }
{ http://www.mozilla.org/MPL/MPL-1.1.html                                      }
{                                                                              }
{ Software distributed under the License is distributed on an "AS IS" basis,   }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License.    }
{                                                                              }
{ Alternatively, the contents of this file may be used under the terms of the  }
{ GNU Lesser General Public License (the  "LGPL License"), in which case the   }
{ provisions of the LGPL License are applicable instead of those above.        }
{ If you wish to allow use of your version of this file only under the terms   }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting  the provisions above and  }
{ replace  them with the notice and other provisions required by the LGPL      }
{ License.  If you do not delete the provisions above, a recipient may use     }
{ your version of this file under either the MPL or the LGPL License.          }
{                                                                              }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{                                                                              }
{******************************************************************************}

// $Id: JwaHtmlHelp.pas,v 1.15 2007/09/14 06:48:45 marquardt Exp $
{$IFNDEF JWA_OMIT_SECTIONS}
unit JwaHtmlHelp;

{$I jediapilib.inc}

interface

{$WEAKPACKAGEUNIT}
{$ENDIF JWA_OMIT_SECTIONS}

(*$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 ''*)

{$IFNDEF JWA_OMIT_SECTIONS}
uses
  {$IFDEF HAS_UNIT_VARIANTS}
  Variants,
  {$ENDIF HAS_UNIT_VARIANTS}
  JwaWinType, JwaWinUser;
{$ENDIF JWA_OMIT_SECTIONS}
// Commands to pass to HtmlHelp()

{$IFNDEF JWA_IMPLEMENTATIONSECTION}
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 HTMLHELP11}
  {$IFDEF HTMLHELP12}
  HH_RESERVED1               = $000A;
  {$EXTERNALSYM HH_RESERVED1}
  HH_RESERVED2               = $000B;
  {$EXTERNALSYM HH_RESERVED2}
  HH_RESERVED3               = $000C;
  {$EXTERNALSYM HH_RESERVED3}
  {$ENDIF HTMLHELP12}
  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 HTMLHELP11}
  {$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 HTMLHELP12}

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

  {$IFDEF HTMLHELP12}
  HHWIN_PROP_TAB_AUTOHIDESHOW = 1 shl 0; // Automatically hide/show tri-pane window
  {$EXTERNALSYM HHWIN_PROP_TAB_AUTOHIDESHOW}
  {$ENDIF HTMLHELP12}
  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 HTMLHELP11}
  {$IFDEF HTMLHELP12}
  HHWIN_PROP_TAB_FAVORITES   = 1 shl 12; // include favorites tab in navigation pane
  {$EXTERNALSYM HHWIN_PROP_TAB_FAVORITES}
  {$ENDIF HTMLHELP12}
  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 HTMLHELP12}

  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 HTMLHELP11}
  {$IFDEF HTMLHELP12}
  HHWIN_BUTTON_FAVORITES     = 1 shl 17; // not implemented
  {$EXTERNALSYM HHWIN_BUTTON_FAVORITES}
  {$ENDIF HTMLHELP12}
  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 HTMLHELP11}
  {$IFDEF HTMLHELP12}
  IDTB_FAVORITES    = 217;                 // not implemented
  {$EXTERNALSYM IDTB_FAVORITES}
  {$ENDIF HTMLHELP12}
  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: INT;          // size of this structure
    hr: HRESULT;            // the last error code.
    description: LPWSTR;    // 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: POINT;                             // top center of popup window
    clrForeGround: COLORREF;               // use -1 for default
    clrBackground: COLORREF;               // use -1 for default
    rcMargins: RECT;                       // 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 HTMLHELP11}
  {$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 HTMLHELP12}

  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 HTMLHELP11}
  {$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 HTMLHELP12}

// 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: LONG;          // 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: RECT;      // 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: RECT;           // 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: RECT;        // Minimum size for window (ignored in version 1)
    cbInfoTypes: Integer;   // size of paInfoTypes;
    {$IFDEF HTMLHELP12}
    pszCustomTabs: LPCTSTR; // multiple zero-terminated Strings
    {$ENDIF HTMLHELP12}
  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;

function HtmlHelpA(hwndCaller: HWND; pszFile: LPCSTR; uCommand: UINT; dwData: DWORD_PTR): HWND; stdcall;
{$EXTERNALSYM HtmlHelpA}
function HtmlHelpW(hwndCaller: HWND; pszFile: LPCWSTR; uCommand: UINT; dwData: DWORD_PTR): HWND; stdcall;
{$EXTERNALSYM HtmlHelpW}
function HtmlHelp(hwndCaller: HWND; pszFile: LPCTSTR; uCommand: UINT; dwData: DWORD_PTR): HWND; stdcall;

// 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;                        // MVB: Added to enforce 8-byte packing
    var_: OleVariant;
  end;
  HH_GLOBAL_PROPERTY = tagHH_GLOBAL_PROPERTY;
  THHGlobalProperty = tagHH_GLOBAL_PROPERTY;

{$ENDIF HTMLHELP12}

{$ENDIF JWA_IMPLEMENTATIONSECTION}

{$IFNDEF JWA_OMIT_SECTIONS}
implementation
{$IFDEF DYNAMIC_LINK}
uses
  JwaWinBase, JwaWinError, JwaWinNT, JwaWinReg;
{$ENDIF DYNAMIC_LINK}
{$ENDIF JWA_OMIT_SECTIONS}

{$IFNDEF JWA_INTERFACESECTION}

{$IFNDEF JWA_INCLUDEMODE}
const
  {$IFDEF UNICODE}
  AWSuffix = 'W';
  {$ELSE}
  AWSuffix = 'A';
  {$ENDIF UNICODE}
{$ENDIF JWA_INCLUDEMODE}

{$IFDEF DYNAMIC_LINK}

function GetOCXPath: string;
const
  HHPathRegKey = 'CLSID\{adb880a6-d8ff-11cf-9377-00aa003b7a11}\InprocServer32';
var
  HHKey: HKEY;
  R, PathSize, ValueType: DWORD;
  Path: string;
begin
  R := ERROR_PATH_NOT_FOUND;
  if RegOpenKeyExA(HKEY_CLASSES_ROOT, PChar(HHPathRegKey), 0, KEY_QUERY_VALUE, HHKey) = ERROR_SUCCESS then
  begin
    ValueType := 0;
    PathSize := 0;
    if RegQueryValueExA(HHKey, PChar(''), nil, @ValueType, nil, @PathSize) = ERROR_SUCCESS then
    begin
      if ValueType = REG_SZ then
      begin
        SetLength(Path, PathSize);
        R := RegQueryValueExA(HHKey, PChar(''), nil, @ValueType, PByte(Path), @PathSize);
        Result := PChar(Path);
      end;
    end;
    RegCloseKey(HHKey);
  end;
  if R <> ERROR_SUCCESS then
    Result := 'hhctrl.ocx';
end;

var
  _HtmlHelpA: Pointer;
  _HtmlHelpW: Pointer;
  _HtmlHelp: Pointer;

function HtmlHelpA;
begin
  GetProcedureAddress(_HtmlHelpA, GetOCXPath, 'HtmlHelpA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HtmlHelpA]
  end;
end;

function HtmlHelpW;
begin
  GetProcedureAddress(_HtmlHelpW, GetOCXPath, 'HtmlHelpW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HtmlHelpW]
  end;
end;

function HtmlHelp;
begin
  GetProcedureAddress(_HtmlHelp, GetOCXPath, 'HtmlHelp' + AWSuffix);
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HtmlHelp]
  end;
end;

{$ELSE}

{$IFNDEF JWA_INCLUDEMODE}
const
  hhctrl = 'hhctrl.ocx';
{$ENDIF JWA_INCLUDEMODE}

function HtmlHelpA; external hhctrl name 'HtmlHelpA';
function HtmlHelpW; external hhctrl name 'HtmlHelpW';
function HtmlHelp; external hhctrl name 'HtmlHelp' + AWSuffix;

{$ENDIF DYNAMIC_LINK}

//your implementation here
{$ENDIF JWA_INTERFACESECTION}

{$IFNDEF JWA_OMIT_SECTIONS}
end.
{$ENDIF JWA_OMIT_SECTIONS}
