利用OnHelp( )在BCB中實現上下文敏感的html help (轉)
關於Html Help,在CSDN上推薦得最多的是如何利用Execute( )或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( 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(T *Sender, TCloseAction &Action)
{
HtmlHelp(NULL, NULL, HH_CLOSE_ALL, 0);
}
//---------------------------------------------------------------------------
這樣就Ok了。上述沒有儲存Application->OnHelp的舊值,也沒有處理Command為其它值的情況,可根據需要加上。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990326/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- BCB中實現動態建立元件 (轉)元件
- 在 BCB5 中實現永久刪除資料表記錄 (轉)
- 在BCB中使用向量實現控制元件陣列 (轉)控制元件陣列
- DFA在C#中的實現:過濾敏感詞C#
- HTML中樹的實現方法 (轉)HTML
- 在C#中利用DirectX實現聲音播放(轉)C#
- 利用BCB編寫具有"磁性"特徵的視窗 (轉)特徵
- 在bcb裡實現像Winamp那樣具有吸附效果的磁性視窗 (轉)
- 在BCB中輕鬆使用ActiveX控制元件 (轉)控制元件
- BCB中用Sender引數實現程式碼重用 (轉)
- 在MySQL中利用外來鍵實現級聯刪除(轉)MySql
- BCB:TEdit控制元件右對齊的簡單實現 (轉)控制元件
- BCB中用Sender實現程式碼重用(糾正篇) (轉)
- 在CGI中實現session的想法和實現 (轉)Session
- 在 Java 中利用 redis 實現 LBS 服務JavaRedis
- 利用poi將Html中table轉為ExcelHTMLExcel
- 利用著色器在WPF中實現陰影特效特效
- 用BCB在windows桌面建立快捷方式 (轉)Windows
- 在vim中實現批次加密(轉)加密
- PostgreSQL中利用驅動程式實現故障轉移SQL
- help.hybris.com和help.sap.com網站的搜尋實現網站
- 在 Pisa-Proxy 中,如何利用 Rust 實現 MySQL 代理RustMySql
- 利用HTML5定位功能,實現在百度地圖上定位HTML地圖
- Java 實現 markdown轉HtmlJavaHTML
- 在Delphi中實現圖片的旋轉、縮放 (轉)
- flask 上下文的實現Flask
- 轉:在ABAP中實現進度條的例子
- 在java中實現對FORM的列印功能 (轉)JavaORM
- 在Word中實現表格的行列互換 (轉)
- 在 Spring Boot中實現包含上下文資訊的JSON日誌? - zachelrathSpring BootJSON
- Java中利用管道實現執行緒間的通訊(轉)Java執行緒
- BCB高手進階 (十)用Sender引數實現程式碼重用 (轉)
- 在Director中實現文字滾動 (轉)
- 在BCB中陣列的妙用和紀錄和改變控制元件的狀態 (轉)陣列控制元件
- 利用顏色實現的口令程式(轉)
- 利用HTML5定位功能,實現在百度地圖上定位薦HTML地圖
- Android在WebView中載入HTML並實現互動AndroidWebViewHTML
- bcb 從TColor物件中解析出紅、綠、藍的亮度 (轉)物件