編譯過的Help文件和關鍵詞文件應當與庫單元在同一目錄。
① 建立Help文件
你可以使用任何的工具創建Windows Help文件。Delphi的多文件搜索引擎,可以包含任何數目的Help文件的要素。在編譯的Help文件之外,你應當擁有RTF源文件,這樣才能生成關鍵詞文件。
為使自定義部件的Help同庫中其它部件一起工作,要遵循下列約定:
● 每個部件有占一頁的幫助
部件幫助頁應當給出部件目的的簡單描述,然後列出最終用戶可用的屬性、事件和方法的描述。應用開發者通過在窗體上選擇部件並按F1訪問這一頁。
部件幫助頁應當有一個用於關鍵詞搜索的“K”腳注,腳注中包含部件名。例如,TMemo的關鍵詞腳注讀作"TMemo Component"
● 部件增加和修改的每一個屬性,事件和方法應當有一頁幫助
屬性、事件或方法的幫助頁應當指出該項用於哪個部件,顯示聲明語法和描述它的使用方法。
屬性、事件或方法的幫助頁應當有一個用於關鍵詞搜索的“K”腳注,該腳注中包含該項的名字和種類。例如,屬性Top的關鍵詞腳注為“Top property”。
Help文件的每一頁也需要用於多文件索引搜索的特殊腳注。
② 增加特殊腳注
Delphi需要特殊的搜索關鍵詞以區別用於部件的幫助頁和其它項目。你應當為每一項提供標准的關鍵詞搜索項。但你也需要用於Delphi的特殊腳注。
要為來自Object Inspector窗口或代碼編輯器F1的搜索增加關鍵詞,就得為Help文件幫助頁增加"B"腳注。
“B”腳注與用於標准WinHelp關鍵詞搜索的“K”腳注很相象,但它們只用於Delphi搜索引擎。下表列出怎樣為每種部件幫助頁建立“B”腳注:
表19.7 部件幫助頁搜索注腳
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
幫助頁類型 "B"腳注內容 示 例
──────────────────────────────────
主部件頁 'class_'+部件類型名 class_TMemd
一般屬性或事件頁 'prop_'+屬性名 prop_WordWrap
'event_'+事件名 event_OnChange
部件特有的屬性 'prop_'+部件類型名 prop_TMemoWordWrap
或事件頁 +屬性名
'event_'+部件類型名 event_TMemoOnChange
+事件名
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
區別一般幫助頁和部件特有的幫助頁是很重要的。一般幫助頁應用於所有部件上的特定屬性和事件。例如Left屬性是所有部件中的標識。因此,它用字符串Prop-Left進行搜索。而Borde-style依賴於所屬的部件,因此,BorderStyle屬性擁有自己的幫助頁。例如,TEdit有BorderStyle屬性的幫助頁,搜索字符串為Prop_TEditBorderStyle。
③ 建立關鍵詞文件
建立和編譯了Help文件,並且增加了腳注之後,還要生成獨立的關鍵詞文件,這樣Delphi才能將它們插入主題搜索的索引。
從Help資源文件RTF創建關鍵詞文件的方法如下:
● 在DOS提示行下,進入包含RTF文件的目錄
● 運行關鍵詞文件產生程序——KWGEN.EXE,後跟Help工程文件,如KWGEN SPECIAL.HPJ。當KWGEN運行完畢後,就有了與Help工程文件相同的關鍵詞文件,但以.KWF為擴展名
● 將關鍵詞文件放在編譯完的庫單元和Help文件相同的目錄
當你在Component Palette上安裝部件時,希望關鍵詞插入Delphi Help系統的搜索索引。
④ 插入Help索引
以自定義部件建立關鍵詞文件後,要將關鍵詞插入Delphi的Help索引。
將關鍵詞文件插入Detphi Help索引的方法如下:
● 將關鍵詞文件放在與編譯完的庫單元和Heph文件相同的目錄中
● 運行HELPINST程序
HELPINST運行完後,Delphi的Help索引文件(.HDX)包含自定義部件幫助頁的關鍵詞。
⑶ 存儲和裝入屬性
Delphi將窗體及其擁有的部件存儲在窗體文件(.DFM)中,DFM文件用二進制表示窗體的屬性和它的部件。當Delphi用戶將自定義部件加入窗體中時,自定義部件應當具有存儲它們的屬性的能力。同樣,當被調入Delphi或應用程序時,部件必須能從DFM文件中恢復它們。
在大多數時候,不需要做任何使部件讀寫DFM文件的事。存儲和裝入都是繼承的祖先部件的行為的一部分。然而在某些情況下,你可能想改變部件存儲和裝入時初始化的方法。因此,應當理解下述的機制:
● 存儲和裝入機制
● 描述缺省值
● 決定存儲什麼
● 裝入後的初始化
① 存儲和裝入機制
當應用開發者設計窗體時,Delphi將窗體的描述存儲在DFM文件中。當用戶運行程序時,它讀取這些描述。
窗體的描述包含了一系列的窗體屬性和窗體中部件的相似描述。每一個部件,包括窗體本身,負責存儲和裝入自身的描述。
在缺省情況下,當存儲時,部件將所有public和published屬性的不同於缺省值的值以聲明的順序寫入。當裝入時,部件首先構造自己,並將所有屬性設為缺省值;然後,讀存儲的、非缺省的屬性值。
這種缺省機制,滿足了大多數部件的需要,而又不需部件編寫者的任何工作。然而自己定義存儲和裝入過程以適合自定義部件需要的方法也有幾種。
② 描述缺省值。
Delphi部件只存儲那些屬性值不同於缺省值的屬性。如果你不描述,Delphi假設屬性沒有缺省值,這意味著部件總是存儲屬性。
一個屬性的值沒被構造函數設置,則被假設為零值。為了描述一個缺省值,在屬性聲明後面加default指令和新的缺省值。
你也能在重聲明屬性時描述缺省值。實際上,重聲明屬性的一個原因是指定不同的缺省值。只描述缺省值,那麼在對象創建時並不會自動地給屬性賦值,還需要在部件的Create方法中賦所需的值。
下面的代碼用Align屬性演示了描述缺省值的過程.
type
TStatusBar=class(TPanel)
public
constructor Create(Aowner: TComponent); override; { 覆蓋以設置新值 }
published
property Align default alBottom; { 重新聲明缺省值 }
end;
constructor TStatusBar.Create(Aowner: TComponent);
begin
inherited Create(Aowner); { 執行繼承的初始化過程 }
Align := alBottom; { 為Align賦新的缺省值 }
end;