2011-10-02 34 views
2

我正在將我的幫助系統構建到我的程序中,並且我正在處理我的上下文相關幫助,這會在按下F1時爲主動控件提供適當的幫助頁面。如何在Delphi中獲取上下文相關的He-lp以使用符號名稱而不是HelpID別名?

在每個控件上,我可以將HelpType設置爲htContext和HelpContext作爲HelpID,或者我可以將HelpType設置爲htKeyword和HelpContext作爲HelpID別名。

但在我的幫助系統(Dr. Explain)中,我設置了符號名稱(即用作幫助系統中書籤的一些文本)。這與HelpID及其別名不同,可通過調用幫助系統訪問:Application.HelpJump(SymbolicName)。

我想爲我的符號名稱使用HelpContext字段,這比創建一組重複的HelpID別名更簡單,更容易維護。而且我不必擔心創建幫助地圖文件或必須處理它。

這是HelpKeyword程序,在表格單元,該處理F1時HelpType是htKeyword時:

function TApplication.HelpKeyword(const Keyword: string): Boolean; 
var 
    CallHelp: Boolean; 
begin 
{$IF DEFINED(CLR)} 
    Result := DoOnHelp(HELP_COMMAND, TObject(Keyword), CallHelp); 
{$ELSE} 
    Result := DoOnHelp(HELP_COMMAND, Integer(PChar(Keyword)), CallHelp); 
{$IFEND} 
    if CallHelp then 
    begin 
    if ValidateHelpSystem then 
    begin 
     { We have to asume ShowHelp worked } 
     Result := True; 
     HelpSystem.ShowHelp(Keyword, GetCurrentHelpFile); 
    end 
    else 
     Result := False; 
    end; 
end; 

爲了得到這個工作來處理我的符號名稱,我真正需要做的就是與替換常規:

function TApplication.HelpKeyword(const Keyword: string): Boolean; 
begin 
    Application.HelpJump(Keyword); 
    Result := true; 
end; 

我似乎無法做的是弄清楚如何編寫正確的代碼來定製這個例程在清潔方式的功能,而無需破解表格單元本身。我怎樣才能做到這一點?

或者,還有另一種方法可以輕鬆獲得上下文相關的幫助,以基於符號名稱訪問我的幫助頁面嗎?

作爲參考,我使用的是德爾福2009(但將在下個月左右升級到XE2)。

p.s.標題中的單詞是「He-lp」,因爲stackoverflow不會讓我在標題中添加「幫助」一詞。

回答

4

試試這個在您的OnHelp事件處理程序(您的形式,或全局應用,這取決於你使用的是什麼):

function TForm1.FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean; 
begin 
    if Command = HELP_COMMAND then 
    begin 
    // avoid default processing 
    CallHelp := False; 
    // do your own processing - in this case, do what Application.HelpJump would do 
    Application.HelpSystem.ShowTopicHelp(PChar(Data), Application.CurrentHelpFile); 
    // assume it worked 
    Result := True; 
    end; 
end; 
+0

好,使用幫助系統是一個很好的想法。數據實際上是字符串對象的地址,所以我必須將PChar(Data)更改爲字符串(PObject(Data))。不幸的是,ShowTopicHelp不適合我。在HelpIntfs單元中,它說「ShowContextHelp()和ShowTopicHelp()僅由擴展的幫助查看器支持。」在我的情況下,它只是調出我的幫助文件的索引頁面。 – lkessler

+0

不用等。我的錯。我得到了它的工作。不知何故,我設置了一些舊代碼CallHelp:= true;但是當我將其改爲false時,現在它會顯示正確的頁面。而你的pchar也適用於這種變化。這現在工作很好。謝謝你的幫助! – lkessler

相關問題