2008-09-17 15 views
3

在Delphi中,應用程序的主幫助文件是通過TApplication.HelpFile財產分配。所有對應用程序幫助系統的調用都會使用此屬性(與CurrentHelpFile一起使用)來確定幫助調用應該路由到的幫助文件。開業德爾福2個HTML幫助文件,同時導致兩個幫助窗口掛

除了TApplication.HelpFile之外,每個表單還有一個TForm.HelpFile屬性,可以用來指定一個不同的(單獨的)幫助文件,以獲取來自該特定表單的幫助調用。

如果應用程序的主幫助窗口已經打開然而,和幫助呼叫從一個次要的幫助文件進行顯示幫助,既幫助窗口掛起。現在無法訪問任何幫助窗口,也無法關閉。擺脫幫助窗口的唯一方法是關閉應用程序,這會導致幫助窗口也自動關閉。

實施例:

Application.HelpFile := 'Main Help.chm'; //assign the main help file name 
Application.HelpContext(0); //dispays the main help window 
Form1.HelpFile := 'Secondary Help.chm'; //assign a different help file 
Application.HelpContext(0); //should display a second help window 

代碼的最後線的上方打開次級幫助窗口(但沒有內容),然後既幫助窗口掛起。

我的問題是這樣的:

  1. 是否有可能同時顯示兩個窗口HTML幫助,如果是這樣,什麼是應遵循的程序?

  2. 如果沒有,有沒有辦法告訴應用程序的幫助窗口是否已經打開,然後顯示不同的幫助窗口前關閉它編程?

(我使用德爾福2007年與Windows Vista上的HTML幫助文件)

更新:2008-09-18

打開兩個在同一時間幫助文件是實際可行的預計使用上面的代碼。問題似乎與我使用的實際幫助文件 - 而不是代碼。

我嘗試了不同的幫助文件相同的代碼,它工作正常。

奇怪的是,我使用的兩個幫助文件各自都能正常工作 - 只有當您試圖同時打開它們並且它們掛起時,並且只有在代碼中打開它們時(Windows資源管理器中的I可以在沒有問題的情況下同時打開)。

反正 - 問題肯定是有幫助文件,而不是代碼 - 使原來的問題是,現在幾乎無效。

更新2:2008-09-18

我終於找到了掛幫助窗口的原因。我將在下面發佈答案並接受它作爲將來參考的正確答案。我也改變了問題標題。

哎呀......看來,我不能接受我自己的答案...

請投上一票,使其保持在頂部。

回答

0

沒有經驗在這裏幫助文件,甚至與Vista moreso,但我可以爲您提供一個可能的解決方法......

建立第二個應用程序,其唯一的工作就是打開幫助文件。您可以將幫助文件名稱作爲命令行參數傳遞。

您可以從主應用程序輕鬆檢查此幫助應用程序是否正在運行。這會給你充分的控制,你可以決定是否要

  • 發送消息打開副幫助
  • 允許幫助應用程序的多個實例,讓不同的幫助之前關閉幫助應用程序文件被打開的同時
  • 讓你的應用程序關閉後幫助保持開放狀態,或者是否要發送消息給它關閉

您還可以檢查是否的一個實例幫助應用程序已經有請求的幫助文件打開並決定是否允許它第二次打開,或者只是將現有實例放到前臺。

如上所述,這是一個解決方法 - 如果它變成你唯一的選擇,讓我知道你是否需要代碼示例。否則,我會保持這個貼子乾淨(和拯救自己的時間在短期內),而不是與

+0

解決方法是一個好主意,但具有第二應用程序只是打開幫助文件可能是矯枉過正。你可以使用ShellExecute(Handle,'open',PChar('HelpFileName.chm'),nil,nil,SW_SHOWNORMAL)獲得相同的結果。 – user5888 2008-09-18 05:31:50

1

我只是測試這一點,它的工作原理,符合市場預期,的那種代碼,你試過不必要的混亂源它。
在D2007/XP中編譯,運行在XP和Vista都沒有問題。

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Application.HelpFile:= 'depends.chm'; 
    Application.HelpContext(0); 
    HelpFile:='GExperts.chm'; 
    Application.HelpContext(0); 
end; 

兩個幫助文件打開,都活的很好....

Q1:你檢查你的幫助文件的有效期是多久?問題2:你在哪裏放置你的代碼?

+0

@Frnacois 你是對的 - 它確實有效。這個問題似乎與我正在使用的實際幫助文件 - 而不是代碼。 – user5888 2008-09-18 05:28:49

1

試過。只是工作。

4

假設您有兩個名爲「幫助文件1.chm」和「幫助文件2.chm」的幫助文件,並且您正在從Delphi代碼中打開這些幫助文件。

要打開幫助文件1,下面的代碼將工作:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Application.HelpFile := 'Help File 1.chm'; 
    Application.HelpContext(0); 
end; 

要打開幫助文件2,下面的代碼將工作:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Application.HelpFile := 'Help File 2.chm'; 
    Application.HelpContext(0); 
end; 

但同時打開這兩個文件時間,下面的代碼會導致幫助windows掛起

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Application.HelpFile := 'Help File 1.chm'; 
    Application.HelpContext(0); 

    Application.HelpFile := 'Help File 2.chm'; 
    Application.HelpContext(0); 
end; 

SOLUTION:

問題是由一個事實,即有空間在幫助文件名引起的。

從文件名刪除空格將解決問題。

下面的代碼將正常工作:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Application.HelpFile := 'HelpFile1.chm'; 
    Application.HelpContext(0); 

    Application.HelpFile := 'HelpFile2.chm'; 
    Application.HelpContext(0); 
end; 
+1

嗯...一個Windoze問題或Delphi問題?如何知道? – 2008-11-18 18:33:38