mirror of
https://github.com/dashr9230/SA-MP.git
synced 2024-12-22 14:37:29 +08:00
[exgui] Add HH unit (HTMP Help API Interface)
This commit is contained in:
parent
58a2f6d494
commit
71747717eb
BIN
exgui/hh.dcu
Normal file
BIN
exgui/hh.dcu
Normal file
Binary file not shown.
624
exgui/hh.pas
Normal file
624
exgui/hh.pas
Normal file
@ -0,0 +1,624 @@
|
||||
{*******************************************************}
|
||||
{ }
|
||||
{ HTML Help API Interface Unit }
|
||||
{ }
|
||||
{ Copyright (c) 1999 The Helpware Group }
|
||||
{ }
|
||||
{*******************************************************}
|
||||
|
||||
{
|
||||
========================================================
|
||||
hh.pas
|
||||
Version: 1.6
|
||||
HTML Help API Unit
|
||||
|
||||
htmlhelp.h ported to The Helpware Group
|
||||
Copyright (c) 1999 The Helpware Group
|
||||
Email: support@helpware.net
|
||||
Web: http://www.helpware.net
|
||||
Platform: Delphi 2, 3, 4, 5, ...
|
||||
|
||||
Notes:
|
||||
htmlhelp.h is distributed with HH Workshop.
|
||||
A free download from
|
||||
http://msdn.microsoft.com/library/tools/htmlhelp/chm/HH1Start.htm
|
||||
|
||||
The name hh.pas was used instead of htmlhelp.pas
|
||||
to avoid a name clash with API function htmlhelp()
|
||||
|
||||
Changes Notes: See hh_doc.txt
|
||||
========================================================
|
||||
}
|
||||
|
||||
unit hh;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, //This line will not compile under Delphi 1 -- D1 is not supported
|
||||
SysUtils,
|
||||
Registry;
|
||||
|
||||
{ >> Create conditional symbols.
|
||||
Note: This module is Delphi 2/3/4/5/.. compatible
|
||||
|
||||
VER90 - Predefined by Delphi 2 compiler.
|
||||
VER100 - Predefined by Delphi 3 compiler.
|
||||
D4PLUS - We defined this if Compiler is Delphi 4 or greater
|
||||
}
|
||||
|
||||
{$DEFINE D4PLUS}
|
||||
|
||||
{$IFDEF VER90} //Dephi 2
|
||||
{$UNDEF D4PLUS}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF VER100} //Dephi 3
|
||||
{$UNDEF D4PLUS}
|
||||
{$ENDIF}
|
||||
|
||||
|
||||
|
||||
var
|
||||
//0 if hhctrl.ocx could not be loaded
|
||||
HHCtrlHandle: THandle = 0;
|
||||
|
||||
//You can set this to false to override the default load API load on module initialization
|
||||
AutoLoadAPI: Boolean = TRUE;
|
||||
|
||||
const
|
||||
hhctrlLib = 'hhctrl.ocx';
|
||||
|
||||
{exports}
|
||||
function GetPathToHHCtrlOCX: string;
|
||||
procedure LoadHtmlHelp;
|
||||
procedure UnloadHtmlHelp;
|
||||
|
||||
|
||||
{ Externals from HHCTRL.OCX }
|
||||
|
||||
var //functions are invalid if HHCtrlHandle = 0
|
||||
HtmlHelpA: function(hwndCaller: HWND; pszFile: PAnsiChar;
|
||||
uCommand: UInt; dwData: DWORD): HWND; stdcall;
|
||||
|
||||
HtmlHelpW: function(hwndCaller: HWND; pszFile: PWideChar;
|
||||
uCommand: UInt; dwData: DWORD): HWND; stdcall;
|
||||
|
||||
HtmlHelp: function(hwndCaller: HWND; pszFile: PChar;
|
||||
uCommand: UInt; dwData: DWORD): HWND; stdcall;
|
||||
|
||||
|
||||
{ Use the following for GetProcAddress to load from hhctrl.ocx }
|
||||
|
||||
const
|
||||
ATOM_HTMLHELP_API_ANSI = 14;
|
||||
ATOM_HTMLHELP_API_UNICODE = 15;
|
||||
|
||||
|
||||
{ Commands to pass to HtmlHelp() }
|
||||
|
||||
const
|
||||
HH_DISPLAY_TOPIC = $0000; {**}
|
||||
HH_HELP_FINDER = $0000; // WinHelp equivalent
|
||||
HH_DISPLAY_TOC = $0001; // not currently implemented
|
||||
HH_DISPLAY_INDEX = $0002; // not currently implemented
|
||||
HH_DISPLAY_SEARCH = $0003; // not currently implemented
|
||||
HH_SET_WIN_TYPE = $0004;
|
||||
HH_GET_WIN_TYPE = $0005;
|
||||
HH_GET_WIN_HANDLE = $0006;
|
||||
HH_ENUM_INFO_TYPE = $0007; // Get Info type name, call repeatedly to enumerate, -1 at end
|
||||
HH_SET_INFO_TYPE = $0008; // Add Info type to filter.
|
||||
HH_SYNC = $0009;
|
||||
HH_RESERVED1 = $000A;
|
||||
HH_RESERVED2 = $000B;
|
||||
HH_RESERVED3 = $000C;
|
||||
HH_KEYWORD_LOOKUP = $000D;
|
||||
HH_DISPLAY_TEXT_POPUP = $000E; // display string resource id or text in a popup window
|
||||
HH_HELP_CONTEXT = $000F; {**}// display mapped numeric value in dwData
|
||||
HH_TP_HELP_CONTEXTMENU = $0010; // text popup help, same as WinHelp HELP_CONTEXTMENU
|
||||
HH_TP_HELP_WM_HELP = $0011; // text popup help, same as WinHelp HELP_WM_HELP
|
||||
HH_CLOSE_ALL = $0012; // close all windows opened directly or indirectly by the caller
|
||||
HH_ALINK_LOOKUP = $0013; // ALink version of HH_KEYWORD_LOOKUP
|
||||
HH_GET_LAST_ERROR = $0014; // not currently implemented // See HHERROR.h
|
||||
HH_ENUM_CATEGORY = $0015; // Get category name, call repeatedly to enumerate, -1 at end
|
||||
HH_ENUM_CATEGORY_IT = $0016; // Get category info type members, call repeatedly to enumerate, -1 at end
|
||||
HH_RESET_IT_FILTER = $0017; // Clear the info type filter of all info types.
|
||||
HH_SET_INCLUSIVE_FILTER = $0018; // set inclusive filtering method for untyped topics to be included in display
|
||||
HH_SET_EXCLUSIVE_FILTER = $0019; // set exclusive filtering method for untyped topics to be excluded from display
|
||||
HH_INITIALIZE = $001C; // Initializes the help system.
|
||||
HH_UNINITIALIZE = $001D; // Uninitializes the help system.
|
||||
HH_PRETRANSLATEMESSAGE = $00fd; // Pumps messages. (NULL, NULL, MSG*).
|
||||
HH_SET_GLOBAL_PROPERTY = $00fc; // Set a global property. (NULL, NULL, HH_GPROP)
|
||||
|
||||
{ window properties }
|
||||
|
||||
const
|
||||
HHWIN_PROP_TAB_AUTOHIDESHOW = $00000001; // (1 << 0) Automatically hide/show tri-pane window
|
||||
HHWIN_PROP_ONTOP = $00000002; // (1 << 1) Top-most window
|
||||
HHWIN_PROP_NOTITLEBAR = $00000004; // (1 << 2) no title bar
|
||||
HHWIN_PROP_NODEF_STYLES = $00000008; // (1 << 3) no default window styles (only HH_WINTYPE.dwStyles)
|
||||
HHWIN_PROP_NODEF_EXSTYLES = $00000010; // (1 << 4) no default extended window styles (only HH_WINTYPE.dwExStyles)
|
||||
HHWIN_PROP_TRI_PANE = $00000020; // (1 << 5) use a tri-pane window
|
||||
HHWIN_PROP_NOTB_TEXT = $00000040; // (1 << 6) no text on toolbar buttons
|
||||
HHWIN_PROP_POST_QUIT = $00000080; // (1 << 7) post WM_QUIT message when window closes
|
||||
HHWIN_PROP_AUTO_SYNC = $00000100; // (1 << 8) automatically ssync contents and index
|
||||
HHWIN_PROP_TRACKING = $00000200; // (1 << 9) send tracking notification messages
|
||||
HHWIN_PROP_TAB_SEARCH = $00000400; // (1 << 10) include search tab in navigation pane
|
||||
HHWIN_PROP_TAB_HISTORY = $00000800; // (1 << 11) include history tab in navigation pane
|
||||
HHWIN_PROP_TAB_FAVORITES = $00001000; // (1 << 12) include favorites tab in navigation pane
|
||||
HHWIN_PROP_CHANGE_TITLE = $00002000; // (1 << 13) Put current HTML title in title bar
|
||||
HHWIN_PROP_NAV_ONLY_WIN = $00004000; // (1 << 14) Only display the navigation window
|
||||
HHWIN_PROP_NO_TOOLBAR = $00008000; // (1 << 15) Don't display a toolbar
|
||||
HHWIN_PROP_MENU = $00010000; // (1 << 16) Menu
|
||||
HHWIN_PROP_TAB_ADVSEARCH = $00020000; // (1 << 17) Advanced FTS UI.
|
||||
HHWIN_PROP_USER_POS = $00040000; // (1 << 18) After initial creation, user controls window size/position
|
||||
HHWIN_PROP_TAB_CUSTOM1 = $00080000; // (1 << 19) Use custom tab #1
|
||||
HHWIN_PROP_TAB_CUSTOM2 = $00100000; // (1 << 20) Use custom tab #2
|
||||
HHWIN_PROP_TAB_CUSTOM3 = $00200000; // (1 << 21) Use custom tab #3
|
||||
HHWIN_PROP_TAB_CUSTOM4 = $00400000; // (1 << 22) Use custom tab #4
|
||||
HHWIN_PROP_TAB_CUSTOM5 = $00800000; // (1 << 23) Use custom tab #5
|
||||
HHWIN_PROP_TAB_CUSTOM6 = $01000000; // (1 << 24) Use custom tab #6
|
||||
HHWIN_PROP_TAB_CUSTOM7 = $02000000; // (1 << 25) Use custom tab #7
|
||||
HHWIN_PROP_TAB_CUSTOM8 = $04000000; // (1 << 26) Use custom tab #8
|
||||
HHWIN_PROP_TAB_CUSTOM9 = $08000000; // (1 << 27) Use custom tab #9
|
||||
HHWIN_TB_MARGIN = $10000000; // (1 << 28) the window type has a margin
|
||||
|
||||
{ window parameters }
|
||||
|
||||
const
|
||||
HHWIN_PARAM_PROPERTIES = $00000002; // (1 << 1) valid fsWinProperties
|
||||
HHWIN_PARAM_STYLES = $00000004; // (1 << 2) valid dwStyles
|
||||
HHWIN_PARAM_EXSTYLES = $00000008; // (1 << 3) valid dwExStyles
|
||||
HHWIN_PARAM_RECT = $00000010; // (1 << 4) valid rcWindowPos
|
||||
HHWIN_PARAM_NAV_WIDTH = $00000020; // (1 << 5) valid iNavWidth
|
||||
HHWIN_PARAM_SHOWSTATE = $00000040; // (1 << 6) valid nShowState
|
||||
HHWIN_PARAM_INFOTYPES = $00000080; // (1 << 7) valid apInfoTypes
|
||||
HHWIN_PARAM_TB_FLAGS = $00000100; // (1 << 8) valid fsToolBarFlags
|
||||
HHWIN_PARAM_EXPANSION = $00000200; // (1 << 9) valid fNotExpanded
|
||||
HHWIN_PARAM_TABPOS = $00000400; // (1 << 10) valid tabpos
|
||||
HHWIN_PARAM_TABORDER = $00000800; // (1 << 11) valid taborder
|
||||
HHWIN_PARAM_HISTORY_COUNT = $00001000; // (1 << 12) valid cHistory
|
||||
HHWIN_PARAM_CUR_TAB = $00002000; // (1 << 13) valid curNavType
|
||||
|
||||
{ button constants }
|
||||
|
||||
const
|
||||
HHWIN_BUTTON_EXPAND = $00000002; // (1 << 1) Expand/contract button
|
||||
HHWIN_BUTTON_BACK = $00000004; // (1 << 2) Back button
|
||||
HHWIN_BUTTON_FORWARD = $00000008; // (1 << 3) Forward button
|
||||
HHWIN_BUTTON_STOP = $00000010; // (1 << 4) Stop button
|
||||
HHWIN_BUTTON_REFRESH = $00000020; // (1 << 5) Refresh button
|
||||
HHWIN_BUTTON_HOME = $00000040; // (1 << 6) Home button
|
||||
HHWIN_BUTTON_BROWSE_FWD = $00000080; // (1 << 7) not implemented
|
||||
HHWIN_BUTTON_BROWSE_BCK = $00000100; // (1 << 8) not implemented
|
||||
HHWIN_BUTTON_NOTES = $00000200; // (1 << 9) not implemented
|
||||
HHWIN_BUTTON_CONTENTS = $00000400; // (1 << 10) not implemented
|
||||
HHWIN_BUTTON_SYNC = $00000800; // (1 << 11) Sync button
|
||||
HHWIN_BUTTON_OPTIONS = $00001000; // (1 << 12) Options button
|
||||
HHWIN_BUTTON_PRINT = $00002000; // (1 << 13) Print button
|
||||
HHWIN_BUTTON_INDEX = $00004000; // (1 << 14) not implemented
|
||||
HHWIN_BUTTON_SEARCH = $00008000; // (1 << 15) not implemented
|
||||
HHWIN_BUTTON_HISTORY = $00010000; // (1 << 16) not implemented
|
||||
HHWIN_BUTTON_FAVORITES = $00020000; // (1 << 17) not implemented
|
||||
HHWIN_BUTTON_JUMP1 = $00040000; // (1 << 18)
|
||||
HHWIN_BUTTON_JUMP2 = $00080000; // (1 << 19)
|
||||
HHWIN_BUTTON_ZOOM = $00100000; // (1 << 20)
|
||||
HHWIN_BUTTON_TOC_NEXT = $00200000; // (1 << 21)
|
||||
HHWIN_BUTTON_TOC_PREV = $00400000; // (1 << 22)
|
||||
|
||||
HHWIN_DEF_BUTTONS = (HHWIN_BUTTON_EXPAND
|
||||
OR HHWIN_BUTTON_BACK
|
||||
OR HHWIN_BUTTON_OPTIONS
|
||||
OR HHWIN_BUTTON_PRINT);
|
||||
|
||||
|
||||
{ Button IDs }
|
||||
|
||||
const
|
||||
IDTB_EXPAND = 200;
|
||||
IDTB_CONTRACT = 201;
|
||||
IDTB_STOP = 202;
|
||||
IDTB_REFRESH = 203;
|
||||
IDTB_BACK = 204;
|
||||
IDTB_HOME = 205;
|
||||
IDTB_SYNC = 206;
|
||||
IDTB_PRINT = 207;
|
||||
IDTB_OPTIONS = 208;
|
||||
IDTB_FORWARD = 209;
|
||||
IDTB_NOTES = 210; // not implemented
|
||||
IDTB_BROWSE_FWD = 211;
|
||||
IDTB_BROWSE_BACK = 212;
|
||||
IDTB_CONTENTS = 213; // not implemented
|
||||
IDTB_INDEX = 214; // not implemented
|
||||
IDTB_SEARCH = 215; // not implemented
|
||||
IDTB_HISTORY = 216; // not implemented
|
||||
IDTB_FAVORITES = 217; // not implemented
|
||||
IDTB_JUMP1 = 218;
|
||||
IDTB_JUMP2 = 219;
|
||||
IDTB_CUSTOMIZE = 221;
|
||||
IDTB_ZOOM = 222;
|
||||
IDTB_TOC_NEXT = 223;
|
||||
IDTB_TOC_PREV = 224;
|
||||
|
||||
|
||||
{ Notification codes }
|
||||
|
||||
const
|
||||
HHN_FIRST = (0-860);
|
||||
HHN_LAST = (0-879);
|
||||
|
||||
HHN_NAVCOMPLETE = (HHN_FIRST-0);
|
||||
HHN_TRACK = (HHN_FIRST-1);
|
||||
HHN_WINDOW_CREATE = (HHN_FIRST-2);
|
||||
|
||||
|
||||
type
|
||||
{*** Used by command HH_GET_LAST_ERROR
|
||||
NOTE: Not part of the htmlhelp.h but documented in HH Workshop help
|
||||
You must call SysFreeString(xx.description) to free BSTR
|
||||
}
|
||||
tagHH_LAST_ERROR = packed record
|
||||
cbStruct: Integer; // sizeof this structure
|
||||
hr: Integer; // Specifies the last error code.
|
||||
description: PWideChar; // (BSTR) Specifies a Unicode string containing a description of the error.
|
||||
end;
|
||||
HH_LAST_ERROR = tagHH_LAST_ERROR;
|
||||
THHLastError = tagHH_LAST_ERROR;
|
||||
|
||||
|
||||
type
|
||||
{*** Notify event info for HHN_NAVCOMPLETE, HHN_WINDOW_CREATE }
|
||||
PHHNNotify = ^THHNNotify;
|
||||
tagHHN_NOTIFY = packed record
|
||||
hdr: TNMHdr;
|
||||
pszUrl: PChar; //PCSTR: Multi-byte, null-terminated string
|
||||
end;
|
||||
HHN_NOTIFY = tagHHN_NOTIFY;
|
||||
THHNNotify = tagHHN_NOTIFY;
|
||||
|
||||
{** Use by command HH_DISPLAY_TEXT_POPUP}
|
||||
PHHPopup = ^THHPopup;
|
||||
tagHH_POPUP = packed record
|
||||
cbStruct: Integer; // sizeof this structure
|
||||
hinst: HINST; // instance handle for string resource
|
||||
idString: cardinal; // string resource id, or text id if pszFile is specified in HtmlHelp call
|
||||
pszText: PChar; // used if idString is zero
|
||||
pt: TPOINT; // top center of popup window
|
||||
clrForeground: COLORREF; // use -1 for default
|
||||
clrBackground: COLORREF; // use -1 for default
|
||||
rcMargins: TRect; // amount of space between edges of window and text, -1 for each member to ignore
|
||||
pszFont: PChar; // facename, point size, char set, BOLD ITALIC UNDERLINE
|
||||
end;
|
||||
HH_POPUP = tagHH_POPUP;
|
||||
THHPopup = tagHH_POPUP;
|
||||
|
||||
{** Use by commands - HH_ALINK_LOOKUP, HH_KEYWORD_LOOKUP}
|
||||
PHHAKLink = ^THHAKLink;
|
||||
tagHH_AKLINK = packed record
|
||||
cbStruct: integer; // sizeof this structure
|
||||
fReserved: BOOL; // must be FALSE (really!)
|
||||
pszKeywords: PChar; // semi-colon separated keywords
|
||||
pszUrl: PChar; // URL to jump to if no keywords found (may be NULL)
|
||||
pszMsgText: PChar; // Message text to display in MessageBox if pszUrl is NULL and no keyword match
|
||||
pszMsgTitle: PChar; // Message text to display in MessageBox if pszUrl is NULL and no keyword match
|
||||
pszWindow: PChar; // Window to display URL in
|
||||
fIndexOnFail: BOOL; // Displays index if keyword lookup fails.
|
||||
end;
|
||||
HH_AKLINK = tagHH_AKLINK;
|
||||
THHAKLink = tagHH_AKLINK;
|
||||
|
||||
|
||||
const
|
||||
HHWIN_NAVTYPE_TOC = 0;
|
||||
HHWIN_NAVTYPE_INDEX = 1;
|
||||
HHWIN_NAVTYPE_SEARCH = 2;
|
||||
HHWIN_NAVTYPE_FAVORITES = 3;
|
||||
HHWIN_NAVTYPE_HISTORY = 4; // not implemented
|
||||
HHWIN_NAVTYPE_AUTHOR = 5;
|
||||
HHWIN_NAVTYPE_CUSTOM_FIRST = 11;
|
||||
|
||||
|
||||
const
|
||||
IT_INCLUSIVE = 0;
|
||||
IT_EXCLUSIVE = 1;
|
||||
IT_HIDDEN = 2;
|
||||
|
||||
type
|
||||
PHHEnumIT = ^THHEnumIT;
|
||||
tagHH_ENUM_IT = packed record //tagHH_ENUM_IT, HH_ENUM_IT, *PHH_ENUM_IT
|
||||
cbStruct: Integer; // size of this structure
|
||||
iType: Integer; // the type of the information type ie. Inclusive, Exclusive, or Hidden
|
||||
pszCatName: PAnsiChar; // Set to the name of the Category to enumerate the info types in a category; else NULL
|
||||
pszITName: PAnsiChar; // volitile pointer to the name of the infotype. Allocated by call. Caller responsible for freeing
|
||||
pszITDescription: PAnsiChar; // volitile pointer to the description of the infotype.
|
||||
end;
|
||||
THHEnumIT = tagHH_ENUM_IT;
|
||||
|
||||
|
||||
type
|
||||
PHHEnumCat = ^THHEnumCat;
|
||||
tagHH_ENUM_CAT = packed record //tagHH_ENUM_CAT, HH_ENUM_CAT, *PHH_ENUM_CAT
|
||||
cbStruct: Integer; // size of this structure
|
||||
pszCatName: PAnsiChar; // volitile pointer to the category name
|
||||
pszCatDescription: PAnsiChar; // volitile pointer to the category description
|
||||
end;
|
||||
THHEnumCat = tagHH_ENUM_CAT;
|
||||
|
||||
|
||||
type
|
||||
PHHSetInfoType = ^THHSetInfoType;
|
||||
tagHH_SET_INFOTYPE = packed record //tagHH_SET_INFOTYPE, HH_SET_INFOTYPE, *PHH_SET_INFOTYPE
|
||||
cbStruct: Integer; // the size of this structure
|
||||
pszCatName: PAnsiChar; // the name of the category, if any, the InfoType is a member of.
|
||||
pszInfoTypeName: PAnsiChar; // the name of the info type to add to the filter
|
||||
end;
|
||||
THHSetInfoType = tagHH_SET_INFOTYPE;
|
||||
|
||||
|
||||
type
|
||||
HH_INFOTYPE = DWORD;
|
||||
THHInfoType = HH_INFOTYPE;
|
||||
PHHInfoType = ^THHInfoType; //PHH_INFOTYPE
|
||||
|
||||
|
||||
const
|
||||
HHWIN_NAVTAB_TOP = 0;
|
||||
HHWIN_NAVTAB_LEFT = 1;
|
||||
HHWIN_NAVTAB_BOTTOM = 2;
|
||||
|
||||
const
|
||||
HH_MAX_TABS = 19; // maximum number of tabs
|
||||
const
|
||||
HH_TAB_CONTENTS = 0;
|
||||
HH_TAB_INDEX = 1;
|
||||
HH_TAB_SEARCH = 2;
|
||||
HH_TAB_FAVORITES = 3;
|
||||
HH_TAB_HISTORY = 4;
|
||||
HH_TAB_AUTHOR = 5;
|
||||
HH_TAB_CUSTOM_FIRST = 11;
|
||||
HH_TAB_CUSTOM_LAST = HH_MAX_TABS;
|
||||
|
||||
HH_MAX_TABS_CUSTOM = (HH_TAB_CUSTOM_LAST - HH_TAB_CUSTOM_FIRST + 1);
|
||||
|
||||
|
||||
|
||||
{ HH_DISPLAY_SEARCH Command Related Structures and Constants }
|
||||
|
||||
const
|
||||
HH_FTS_DEFAULT_PROXIMITY = (-1);
|
||||
|
||||
type
|
||||
{** Used by command HH_DISPLAY_SEARCH}
|
||||
PHHFtsQuery = ^THHFtsQuery;
|
||||
tagHH_FTS_QUERY = packed record //tagHH_FTS_QUERY, HH_FTS_QUERY
|
||||
cbStruct: integer; // Sizeof structure in bytes.
|
||||
fUniCodeStrings: BOOL; // TRUE if all strings are unicode.
|
||||
pszSearchQuery: PChar; // 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: PChar; // Window to display in
|
||||
end;
|
||||
THHFtsQuery = tagHH_FTS_QUERY;
|
||||
|
||||
|
||||
{ HH_WINTYPE Structure }
|
||||
|
||||
type
|
||||
{** Used by commands HH_GET_WIN_TYPE, HH_SET_WIN_TYPE}
|
||||
PHHWinType = ^THHWinType;
|
||||
tagHH_WINTYPE = packed record //tagHH_WINTYPE, HH_WINTYPE, *PHH_WINTYPE;
|
||||
cbStruct: Integer; // IN: size of this structure including all Information Types
|
||||
fUniCodeStrings: BOOL; // IN/OUT: TRUE if all strings are in UNICODE
|
||||
pszType: PChar; // 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: PChar; // 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: PChar; // IN: Location of the table of contents file
|
||||
pszIndex: PChar; // IN: Location of the index file
|
||||
pszFile: PChar; // IN: Default location of the html file
|
||||
pszHome: PChar; // IN/OUT: html file to display when Home button is clicked
|
||||
fsToolBarFlags: DWORD; // IN: flags controling the appearance of the toolbar (HHWIN_BUTTON_)
|
||||
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: packed 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: PChar; // Text for HHWIN_BUTTON_JUMP1
|
||||
pszJump2: PChar; // Text for HHWIN_BUTTON_JUMP2
|
||||
pszUrlJump1: PChar; // URL for HHWIN_BUTTON_JUMP1
|
||||
pszUrlJump2: PChar; // URL for HHWIN_BUTTON_JUMP2
|
||||
rcMinSize: TRect; // Minimum size for window (ignored in version 1)
|
||||
|
||||
cbInfoTypes: Integer; // size of paInfoTypes;
|
||||
pszCustomTabs: PChar; // multiple zero-terminated strings
|
||||
end;
|
||||
HH_WINTYPE = tagHH_WINTYPE;
|
||||
THHWinType = tagHH_WINTYPE;
|
||||
|
||||
const
|
||||
HHACT_TAB_CONTENTS = 0;
|
||||
HHACT_TAB_INDEX = 1;
|
||||
HHACT_TAB_SEARCH = 2;
|
||||
HHACT_TAB_HISTORY = 3;
|
||||
HHACT_TAB_FAVORITES = 4;
|
||||
|
||||
HHACT_EXPAND = 5;
|
||||
HHACT_CONTRACT = 6;
|
||||
HHACT_BACK = 7;
|
||||
HHACT_FORWARD = 8;
|
||||
HHACT_STOP = 9;
|
||||
HHACT_REFRESH = 10;
|
||||
HHACT_HOME = 11;
|
||||
HHACT_SYNC = 12;
|
||||
HHACT_OPTIONS = 13;
|
||||
HHACT_PRINT = 14;
|
||||
HHACT_HIGHLIGHT = 15;
|
||||
HHACT_CUSTOMIZE = 16;
|
||||
HHACT_JUMP1 = 17;
|
||||
HHACT_JUMP2 = 18;
|
||||
HHACT_ZOOM = 19;
|
||||
HHACT_TOC_NEXT = 20;
|
||||
HHACT_TOC_PREV = 21;
|
||||
HHACT_NOTES = 22;
|
||||
|
||||
HHACT_LAST_ENUM = 23;
|
||||
|
||||
|
||||
type
|
||||
{*** Notify event info for HHN_TRACK }
|
||||
PHHNTrack = ^THHNTrack;
|
||||
tagHHNTRACK = packed record //tagHHNTRACK, HHNTRACK;
|
||||
hdr: TNMHdr;
|
||||
pszCurUrl: PChar; // Multi-byte, null-terminated string
|
||||
idAction: Integer; // HHACT_ value
|
||||
phhWinType: PHHWinType; // Current window type structure
|
||||
end;
|
||||
HHNTRACK = tagHHNTRACK;
|
||||
THHNTrack = tagHHNTRACK;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Global Control Properties.
|
||||
//
|
||||
const
|
||||
HH_GPROPID_SINGLETHREAD = 1; // VARIANT_BOOL: True for single thread
|
||||
HH_GPROPID_TOOLBAR_MARGIN = 2; // long: Provides a left/right margin around the toolbar.
|
||||
HH_GPROPID_UI_LANGUAGE = 3; // long: LangId of the UI.
|
||||
HH_GPROPID_CURRENT_SUBSET = 4; // BSTR: Current subset.
|
||||
HH_GPROPID_CONTENT_LANGUAGE = 5; // long: LandId for desired content.
|
||||
|
||||
type
|
||||
tagHH_GPROPID = HH_GPROPID_SINGLETHREAD..HH_GPROPID_CONTENT_LANGUAGE; //tagHH_GPROPID, HH_GPROPID
|
||||
HH_GPROPID = tagHH_GPROPID;
|
||||
THHGPropID = HH_GPROPID;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Global Property structure
|
||||
//
|
||||
type
|
||||
PHHGlobalProperty = ^THHGlobalProperty;
|
||||
tagHH_GLOBAL_PROPERTY = record //tagHH_GLOBAL_PROPERTY, HH_GLOBAL_PROPERTY
|
||||
id: THHGPropID;
|
||||
Dummy: Integer; // Added to enforce 8-byte packing
|
||||
var_: VARIANT;
|
||||
end;
|
||||
HH_GLOBAL_PROPERTY = tagHH_GLOBAL_PROPERTY;
|
||||
THHGlobalProperty = tagHH_GLOBAL_PROPERTY;
|
||||
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
{Return Windows System Dir - with no trailing slash}
|
||||
function GetWinSysDir: String;
|
||||
var path: array[0..260] of Char;
|
||||
begin
|
||||
GetSystemDirectory(path, SizeOf(path));
|
||||
result := path;
|
||||
if result[length(result)] = '\' then
|
||||
SetLength(result, length(result)-1);
|
||||
end;
|
||||
|
||||
|
||||
const hhPathRegKey = 'CLSID\{adb880a6-d8ff-11cf-9377-00aa003b7a11}\InprocServer32';
|
||||
|
||||
{ Returns full path to hhctrl.ocx.
|
||||
Returns empty string if file or registry entry not found.
|
||||
Note: hhctrl.ocx may not be in the path. Consider the case where
|
||||
the ocx has been downloaded to the windows ocx cache via the net.
|
||||
So.. best to get the path from the registry.
|
||||
Note: Delphi 2 and 3 do not support reg.OpenKeyReadOnly()
|
||||
and to access the registry as RW mode under NT (as non admin user) will cause
|
||||
an access violation. Best to simply return the ocx path to system folder.
|
||||
In 99.9% of cases this will be correct.
|
||||
}
|
||||
function GetPathToHHCtrlOCX: string;
|
||||
{$IFDEF D4PLUS} // -- Delphi >=4 ------------
|
||||
var Reg: TRegistry;
|
||||
{$ENDIF}
|
||||
begin
|
||||
{$IFDEF D4PLUS} // -- Delphi >=4 ------------
|
||||
result := ''; //default return
|
||||
Reg := TRegistry.Create;
|
||||
Reg.RootKey := HKEY_CLASSES_ROOT;
|
||||
if Reg.OpenKeyReadOnly(hhPathRegKey) then //safer call under NT
|
||||
begin
|
||||
result := Reg.ReadString(''); //default value
|
||||
Reg.CloseKey;
|
||||
if (result <> '') and (not FileExists(result)) then //final check - file must exist
|
||||
result := '';
|
||||
end;
|
||||
Reg.Free;
|
||||
{$ELSE} // -- Delphi <4 ------------
|
||||
Result := GetWinSysDir + '\hhctrl.ocx';
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
|
||||
{setup HTML Help API function interface
|
||||
sets HHCtrlHandle = 0 if API function not available }
|
||||
procedure LoadHtmlHelp;
|
||||
var OcxPath: string;
|
||||
begin
|
||||
if HHCtrlHandle = 0 then
|
||||
begin
|
||||
OcxPath := GetPathToHHCtrlOCX;
|
||||
if (OcxPath <> '') and FileExists(OcxPath) then
|
||||
begin
|
||||
HHCtrlHandle := LoadLibrary(PChar(OcxPath));
|
||||
if HHCtrlHandle <> 0 then
|
||||
begin
|
||||
@HtmlHelpA := GetProcAddress(HHCtrlHandle, 'HtmlHelpA');
|
||||
@HtmlHelpW := GetProcAddress(HHCtrlHandle, 'HtmlHelpW');
|
||||
@HtmlHelp := GetProcAddress(HHCtrlHandle, 'HtmlHelpA');
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure UnloadHtmlHelp;
|
||||
begin
|
||||
if HHCtrlHandle <> 0 then
|
||||
begin
|
||||
FreeLibrary(HHCtrlHandle);
|
||||
@HtmlHelpA := nil;
|
||||
@HtmlHelpW := nil;
|
||||
@HtmlHelp := nil;
|
||||
HHCtrlHandle := 0;
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
if AutoLoadAPI then
|
||||
LoadHtmlHelp;
|
||||
finalization
|
||||
UnloadHtmlHelp;
|
||||
end.
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user