Delphi程式與Chm幫助關聯的簡單實現作者:李新[email protected] QQ:1348513Chm格式的幫助是從windows98以後才出現的新的格式,與.hlp格式相比,具有更簡單的編輯方式、更豐富的畫面。它是透過Chm製作工具對網頁檔案進行編譯得到的,所以理論上你可以把幫助文件做的和網頁一樣漂亮。最簡單的製作方法:先用FronPage製作幫助文件,然後用HTMLHelpWorkshop編譯就可以得到*.chm的幫助文件了。 HTMLHelpWorkshop可以到微軟的網站去下載。應用程式中的幫助可分為上下文關聯和非關聯兩種。上下文關聯,是指使用者按F1鍵後,出現與目前焦點對象(如窗體、文字框、下拉列錶框)相關的幫助畫面;不同對象,出現的幫助不同。非關聯幫助,是指程式任何位置按F1鍵後,出現相同幫助畫面。以下就這兩種方式,談談在Delphi中的簡單實作方法。一、非關聯的chm幫助在Delphi中,你可以透過ShellExecute函數直接呼叫chm幫助文件,具體如下:usesshellapi
.......var HWndHelp:Hwnd; i:integer;begin //檢查幫助視窗是否已經存在HWndHelp:=FindWindow(nil,conHelpTitle); if HwndHelp<>0 then // 如存在則關閉SendMessage(HwndHelp ,WM_CLOSE,0,0); i:=ShellExecute(handle, 'open',Pchar(strCurExePath+'/help.chm''),nil, nil, sw_ShowNormal); if i<>42 then Showmessage(' help.chm 幫助文件損壞!');end;二、上下文關聯的chm幫助在Delphi中實現上下文關聯的chm幫助,可以呼叫Windows系統目錄System32下的HHCTRL.OCX控制項中的HtmlHelpA函數實作。需要以下幾個步驟: 1 設定相關控制項的HelpContext屬性。 例,主窗體frmMain::10100 ,其中的文字方塊edtInput:10101 對話框dlgReport:10200 ,其中的組合列錶框cbReportEdit:102012 宣告HtmlHelpAfunction HtmlHelpA (hw) Helpler :string): HWND;stdcall; external 'hhctrl.ocx'3 F1按鍵回應//公用函數ShowChmHelp顯示不同幫助畫面。 PRocedure ShowChmHelp(sTopic:string); var i:integer;begin i:=HtmlHelpA(application.Handle,Pchar(ExePath+'/help.chm'),HH_DISPLAY_TOPIC,sTopic); if i=0 then begin Showp. chm 幫助文件損壞! end;end;….function TfrmMain.FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean;begin case Data of 10100: ShowChmHelp(frmMain.htm); 10101: ShowChmHelp('edtInput.htm'Main.htm); 10101: ShowChmHelp('edtInput.htm'Main.htm) ;… else ShowChmHelp(default.htm'); end;end;function TdlgReport.FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean;begin case Data of 10200: ShowChmHelp('dlgReport.htm');10201: ShowChmHelp(cbReportEdit.htm');… .htm'); end;end;