線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1143
推到 Plurk!
推到 Facebook!

有關BCB 呼叫help檔並對關鍵字作檢索之疑惑???

尚未結案
Nowitzki_41
一般會員


發表:1
回覆:2
積分:0
註冊:2005-03-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-17 12:21:09 IP:61.220.xxx.xxx 未訂閱
最近想做一個BCB 呼叫help檔並對關鍵字作檢索之功能,在網路上找到了一篇還蠻適用的文章,但在compiler中總是會出現錯誤訊息,小弟將之post出來,希望能找到救兵. (原文如下)...... 关于Html Help,在CSDN上推荐得最多的是如何利用ShellExecute( )或HtmlHelp( )来打开相应的帮助文件和帮助主题。本人在查找了一些资料后试验成功一种在BCB中简单易行的显示上下文敏感的Html Help的方法,其效果和旧式的上下文敏感的WinHelp( )完全相同。这种方法的代码量小,而且可扩展性好,当你以后在帮助文件中增加主题时根本不需要再改动你的代码,只需要修改chm文件和窗体上各控件的HelpContext属性值即可。 假定程序的chm帮助文件中有三个主题文件1.htm、2.htm、3.htm,窗体上有3个TEdit控件,要达到的目的为: 当在第一个TEdit控件上按F1键时显示1.htm的内容,在第二个TEdit控件上按F1键时显示2.htm的内容,依次类推。这就是所谓的上下文敏感帮助。 当然你可以通过截获F1键并判断当前是哪个TEdit控件拥有输入焦点,从而调用ShellExecute( )或HtmlHelp( )来显示相应的html主题。但这种方法可扩展性不好,以后增加html文件时需要修改程序代码。 做法如下: 1、用文本编辑器直接编辑html help的project文件*.hhp,加入下面的内容。也可以通过html help workshop的界面加入。这相当于将3个html文件映射为3个context ID。之后重新编译你的project。 [ALIAS] IDH_CHAPTER1 = 1.htm IDH_CHAPTER2 = 2.htm IDH_CHAPTER3 = 3.htm [MAP] #define IDH_CHAPTER1 1001 #define IDH_CHAPTER2 1002 #define IDH_CHAPTER3 1003 2、设置窗体上的3个TEdit控件的HelpContext属性分别为1001、1002、1003。 3、修改程序代码,重载TApplication->OnHelp(当然也可以重载各Form的OnHelp),利用HtmlHelp( )来显示相应的上下文敏感帮助。当Command取值为HELP_CONTEXT时,Data就是你按F1键时拥有输入焦点的那个控件的HelpContext属性值。 __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Application->HelpFile = "Main.chm"; Application->OnHelp = AppHelp; } //-------------------------------------------------------------------------- bool __fastcall TForm1::AppHelp(Word Command, int Data, bool &CallHelp) { switch(Command) { case HELP_CONTEXT: HtmlHelp(GetDesktopWindow(), Application->HelpFile.c_str( ), HH_HELP_CONTEXT, Data); CallHelp = false; break; default: CallHelp = true; } return true; } //-------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { HtmlHelp(NULL, NULL, HH_CLOSE_ALL, 0); } //--------------------------------------------------------------------------- 这样就Ok了。上述没有保存Application->OnHelp的旧值,也没有处理Command为其它值的情况,可根据需要加上。...........end(原文至此) 可是我每次在compiler時都會出現: [C Error] chm.cpp(16): E2451 Undefined symbol 'AppHelp' [C Error] chm.cpp(20): E2316 '_fastcall TForm1::AppHelp(unsigned short,int,bool &)' is not a member of 'TForm1' [C Error] chm.cpp(40): E2316 '_fastcall TForm1::FormClose(TObject *,TCloseAction &)' is not a member of 'TForm1' 是不是作者精簡了哪些步驟,小弟是bcb菜鳥一隻,若所提問題太淺,請勿見笑!!thanks!!
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-17 19:26:57 IP:221.169.xxx.xxx 未訂閱
error 訊息已經明白告訴你了,你沒有定義 AppHelp 跟 FormClose 函式 FormClose 函式你在BCB畫面左下角的 Object Inspector視窗 在Events列表中找 OnClose 事件,double click兩下,就自動幫你加上去了 AppHelp就要手動修改 Form 的.h檔 看起來向下面這個樣子 class TMainForm : public TForm { __published: TMainMenu *MainMenu; void __fastcall FormCreate(TObject *Sender); bool __fastcall FormHelp(WORD Command, int Data, bool &CallHelp); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); public: // public user declarations virtual __fastcall TMainForm(TComponent* Owner); bool __fastcall AppHelp(Word Command, int Data, bool &CallHelp) ; //自己加這行上去 }; //--------------------------------------------------------------------------- extern TMainForm *MainForm;
Nowitzki_41
一般會員


發表:1
回覆:2
積分:0
註冊:2005-03-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-18 13:25:17 IP:61.220.xxx.xxx 未訂閱
感謝解答,小弟受教了!!
系統時間:2024-05-06 22:43:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!