DELPHI FAQ: Как использовать CHM Help файлы?


Как использовать CHM Help файлы?
Previous  Home  Next



unit
 HtmlHelp; 

interface
 

uses
 
  Windows, Graphics; 

const
 
  HH_DISPLAY_TOPIC  = $0000

  HH_DISPLAY_TOC    = $0001

  HH_DISPLAY_INDEX
  = $0002
  HH_DISPLAY_SEARCH = $0003

  HH_SET
_WIN_TYPE   = $0004
  HH_GET_WIN_TYPE
   = $0005
  HH_GET_WIN_HANDLE = $0006

  HH_GET_INFO_TYPES = $0007

  HH_SET
_INFO_TYPES = $0008
  HH_SYNC           = $0009

  HH_ADD_NAV_UI     = $000A

  HH_ADD_BUTTON     = $000B

  HH_GETBROWSER_APP = $000C

  HH_KEYWORD_LOOKUP = $000D

  HH_DISPLAY_TEXT_POPUP = $000E

  HH_HELP_CONTEXT   = $000F


const
 
  HHWIN_PROP_ONTOP          = 2

  HHWIN_PROP_NOTITLEBAR     = 4

  HHWIN_PROP_NODEF_STYLES   = 8

  HHWIN_PROP_NODEF_EXSTYLES = 16

  HHWIN_PROP_TRI_PANE       = 32

  HHWIN_PROP_NOTB_TEXT      = 64

  HHWIN_PROP_POST_QUIT      = 128

  HHWIN_PROP_AUTO_SYNC      = 256

  HHWIN_PROP_TRACKING       = 512

  HHWIN_PROP_TAB_SEARCH     = 1024

  HHWIN_PROP_TAB_HISTORY    = 2048

  HHWIN_PROP_TAB_FAVORITES  = 4096

  HHWIN_PROP_CHANGE_TITLE   = 8192

  HHWIN_PROP_NAV_ONLY_WIN   = 16384

  HHWIN_PROP_NO_TOOLBAR     = 32768


const
 
  HHWIN_PARAM_PROPERTIES    = 2

  HHWIN_PARAM_STYLES        = 4

  HHWIN_PARAM_EXSTYLES      = 8

  HHWIN_PARAM_RECT          = 16

  HHWIN_PARAM_NAV_WIDTH     = 32

  HHWIN_PARAM_SHOWSTATE     = 64

  HHWIN_PARAM_INFOTYPES     = 128

  HHWIN_PARAM_TB_FLAGS      = 256

  HHWIN_PARAM_EXPANSION     = 512

  HHWIN_PARAM_TABPOS        = 1024

  HHWIN_PARAM_TABORDER      = 2048

  HHWIN_PARAM_HISTORY_COUNT = 4096

  HHWIN_PARAM_CUR_TAB       = 8192


const
 
  HHWIN_BUTTON_EXPAND     = 2

  HHWIN_BUTTON_BACK       = 4

  HHWIN_BUTTON_FORWARD
    = 8
  HHWIN_BUTTON_STOP       = 16

  HHWIN_BUTTON_REFRESH    = 32

  HHWIN_BUTTON_HOME       = 64

  HHWIN_BUTTON_BROWSE_FWD = 128

  HHWIN_BUTTON_BROWSE_BCK = 256

  HHWIN_BUTTON_NOTES      = 512

  HHWIN_BUTTON_CONTENTS   = 1024

  HHWIN_BUTTON_SYNC       = 2048

  HHWIN_BUTTON_OPTIONS    = 4096

  HHWIN_BUTTON_PRINT      = 8192

  HHWIN_BUTTON_INDEX
      = 16384
  HHWIN_BUTTON_SEARCH     = 32768

  HHWIN_BUTTON_HISTORY    = 65536

  HHWIN_BUTTON_FAVORITES  = 131072

  HHWIN_BUTTON_JUMP1      = 262144

  HHWIN_BUTTON_JUMP2      = 524288

  HHWIN_BUTTON_ZOOM       = HHWIN_Button_Jump2 * 2

  HHWIN_BUTTON_TOC_NEXT   = HHWIN_Button_Zoom * 2

  HHWIN_BUTTON_TOC_PREV   = HHWIN_Button_Toc_Next * 2


const
 
  HHWIN_DEF_Buttons = HHWIN_Button_Expand or
 HHWIN_Button_Back or 
    HHWIN_Button_Options or
 HHWIN_Button_Print; 

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

  IDTB_BROWSE_FWD  = 211

  IDTB_BROWSE_BACK = 212

  IDTB_CONTENTS    = 213

  IDTB_INDEX
       = 214
  IDTB_SEARCH      = 215

  IDTB_HISTORY     = 216

  IDTB_FAVORITES   = 217

  IDTB_JUMP1       = 218

  IDTB_JUMP2       = 219

  IDTB_CUSTOMIZE   = 221

  IDTB_ZOOM        = 222

  IDTB_TOC_NEXT    = 223

  IDTB_TOC_PREV    = 224


const
 
  HHN_First = Cardinal(-860
); 
  HHN_Last  = Cardinal(-879
); 

  HHN_NavComplete = HHN_First - 0

  HHN_Track       = HHN_First - 1


type
 
  HHN_Notify = record
 
    hdr: Pointer; 
    pszUrl: PWideChar; 
  end


  HH_Popup = record
 
    cbStruct: Integer; 
    hinst: THandle; 
    idString: Cardinal; 
    pszText: PChar; 
    pt: TPoint; 
    clrForeground: TColor; 
    clrBackground: TColor; 
    rcMargins: TRect; 
    pszFont: PChar; 
  end


  HH_AKLINK = record
 
    cbStruct: Integer; 
    fReserved: bool; 
    pszKeywords: PChar; 
    pszUrl: PChar; 
    pszMsgText: PChar; 
    pszMsgTitle: PChar; 
    pszWindow: PChar; 
    fIndexOnFail: bool; 
  end


type
 
  HHWin_NavTypes = (HHWIN_NAVTYPE_TOC, 
    HHWIN_NAVTYPE_INDEX

    HHWIN_NAVTYPE_SEARCH, 
    HHWIN_NAVTYPE_HISTORY, 
    HHWIN_NAVTYPE_FAVOURITES); 

type
 
  HH_InfoType  = Longint; 
  PHH_InfoType = ^ HH_InfoType; 

type
 
  HHWin_NavTabs = (HHWIN_NavTab_Top, 
    HHWIN_NavTab_Left, 
    HHWIN_NavTab_Bottom); 

const
 
  HH_Max_Tabs = 19


type
 
  HH_Tabs = (HH_TAB_CONTENTS, 
    HH_TAB_INDEX

    HH_TAB_SEARCH, 
    HH_TAB_HISTORY, 
    HH_TAB_FAVORITES 
    ); 

const
 
  HH_FTS_DEFAULT
_PROXIMITY = (-1); 

type
 
  HH_FTS_Query = record
 
    cbStruct: Integer; 
    fUniCodeStrings: bool; 
    pszSearchQuery: PChar; 
    iProximity: Longint; 
    fStemmedSearch: bool; 
    fTitleOnly: bool; 
    fExecute: bool; 
    pszWindow: PChar; 
  end


type
 
  HH_WinType = record
 
    cbStruct: Integer; 
    fUniCodeStrings: bool; 
    pszType: PChar; 
    fsValidMembers: Longint; 
    fsWinProperties: Longint; 
    pszCaption: PChar; 
    dwStyles: Longint; 
    dwExStyles: Longint; 
    rcWindowPos: TRect; 
    nShowState: Integer; 
    hwndHelp: THandle; 
    hwndCaller: THandle; 
    paInfoTypes: ^ HH_InfoType; 
    hwndToolbar: THandle; 
    hwndNavigation: THandle; 
    hwndHTML: THandle; 
    iNavWidth: Integer; 
    rcHTML: TRect; 
    pszToc: PChar; 
    pszIndex: PChar; 
    pszFile: PChar; 
    pszHome: PChar; 
    fsToolbarFlags: Longint; 
    fNotExpanded: bool; 
    curNavType: Integer; 
    tabPos: Integer; 
    idNotify: Integer; 
    TabOrder: array
[0..HH_Max_Tabs + 1of Byte; 
    cHistory: Integer; 
    pszJump1: PChar; 
    pszJump2: PChar; 
    pszUrlJump1: PChar; 
    pszUrlJump2: PChar; 
    rcMinSize: TRect; 
  end


  PHH_WinType = ^ HH_WinType; 

type
 
  HHACTTYpes = (HHACT_TAB_CONTENTS, 
    HHACT_TAB_INDEX

    HHACT_TAB_SEARCH, 
    HHACT_TAB_HISTORY, 
    HHACT_TAB_FAVORITES, 

    HHACT_EXPAND, 
    HHACT_CONTRACT, 
    HHACT_BACK, 
    HHACT_FORWARD

    HHACT_STOP, 
    HHACT_REFRESH, 
    HHACT_HOME, 
    HHACT_SYNC, 
    HHACT_OPTIONS, 
    HHACT_PRINT, 
    HHACT_HIGHLIGHT, 
    HHACT_CUSTOMIZE, 
    HHACT_JUMP1, 
    HHACT_JUMP2, 
    HHACT_ZOOM, 
    HHACT_TOC_NEXT, 
    HHACT_TOC_PREV, 
    HHACT_NOTES, 

    HHACT_LAST_ENUM 
    ); 

type
 
  HHNTRACK = record
 
    hdr: TNMHDR; 
    pszCurUrl: PWideChar; 
    idAction: Integer; 
    phhWinType: ^ HH_WinType; 
  end

  PHHNTRACK = ^ HHNTRACK; 

  HHNNAVCOMPLETE = record
 
    hdr: TNMHDR; 
    pszUrl: PChar; 
  end

  PHHNNAVCOMPLETE = ^ HHNNAVCOMPLETE; 

type
 
  THtmlHelpA = function
(hwndCaller: THandle; pszFile: PChar; 
    uCommand: Cardinal; dwData: Longint): THandle;  
  stdCall

  THtmlHelpW = function
(hwndCaller: THandle; pszFile: PChar; 
    uCommand: Cardinal; dwData: Longint): THandle;  
  stdCall


function
 HH(hwndCaller: THandle; pszFile: PChar; uCommand: Cardinal; 
  dwData: Longint): THandle; 
function
 HtmlHelpInstalled: Boolean; 

implementation
 

const
 
  ATOM_HTMLHELP_API_ANSI = #14#0

  ATOM_HTMLHELP_API_UNICODE = #15#0


var
 
  HtmlHelpA: THtmlHelpA; 
  OCXHandle: THandle; 

function
 HH; 
begin
 
  Result := 0

  if
 (Assigned(HtmlHelpA)) then  
  begin
 
    Result := HtmlHelpA(hwndCaller, pszFile, uCommand, dwData); 
  end

end


function
 HtmlHelpInstalled: Boolean; 
begin
 
  Result := (Assigned(HtmlHelpA)); 
end


initialization
 
  begin
 
    HtmlHelpA := nil

    OCXHandle := LoadLibrary('HHCtrl.OCX'
); 
    if
 (OCXHandle <> 0then  
    begin
 
      HtmlHelpA := GetProcAddress(OCXHandle, 'HtmlHelpA'
); 
    end

  end


finalization
 
  begin
 
    if
 (OCXHandle <> 0then 
      FreeLibrary(OCXHandle); 
  end

end

//----------------------------------------------- 


unit
 Unit1; 

{....}
 

implementation
 

uses
 
  HtmlHelp; 

const
 
  HH_HELP_CONTEXT = $F

  MYHELP_FILE
 = 'DualHelp.chm' + Chr(0); 
var
 
  RetCode: LongInt; 

  {$R *.DFM}
 

procedure
 TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); 
begin
 
  if
 Key = vk_f1 then 
  begin
 
    if
 HtmlHelpInstalled = True then 
    begin
 
      RetCode := HH(Form1.Handle, PChar(MYHELP_FILE
), HH_HELP_CONTEXT, 
        ActiveControl.HelpContext); 
      Key     := 0
//eat it! 
    end
  
    else
 
      helpfile := 'hhtest.hlp'

  end

end


Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php




DELPHI FAQ




EOMY TOP 100      Рейтинг@Mail.ru      Rambler's Top100