在Delphi中同时打开两个HTMLHelp文件会导致两个帮助窗口挂起
在Delphi中,应用程序的主帮助文件是通过TApplication.HelpFile属性分配的。然后,对应用程序帮助系统的所有调用都使用此属性(与CurrentHelpFile一起)来确定帮助调用应路由到的帮助文件 除了TApplication.HelpFile外,每个表单还具有一个TForm.HelpFile属性,可用于为来自该特定表单的帮助调用指定不同(单独)的帮助文件 但是,如果应用程序的主帮助窗口已打开,并且通过辅助帮助文件发出帮助调用以显示帮助,则两个帮助窗口都会挂起。两个帮助窗口现在都不能访问,也不能关闭。摆脱帮助窗口的唯一方法是关闭应用程序,这会导致两个帮助窗口也自动关闭 例如:在Delphi中同时打开两个HTMLHelp文件会导致两个帮助窗口挂起,delphi,chm,Delphi,Chm,在Delphi中,应用程序的主帮助文件是通过TApplication.HelpFile属性分配的。然后,对应用程序帮助系统的所有调用都使用此属性(与CurrentHelpFile一起)来确定帮助调用应路由到的帮助文件 除了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
上面的最后一行代码打开辅助帮助窗口(但没有内容),然后两个帮助窗口都挂起
我的问题是:
请对其进行投票,使其保持在顶部。对这里的帮助文件缺乏经验,对Vista更是如此,但我可以为您提供一个可能的解决方案 构建第二个应用程序,其唯一任务是打开帮助文件。可以将帮助文件名作为命令行参数传递 您可以从主应用程序轻松检查此帮助应用程序是否正在运行。这将给你完全的控制权,因为你可以决定你是否想要
- 在打开辅助帮助之前,发送消息以关闭帮助应用程序
- 允许帮助应用程序的多个实例同时打开不同的帮助文件
- 允许帮助在应用程序关闭后保持打开状态,或者是否要向其发送消息以关闭它
如前所述,这是一个变通方法-如果它是您唯一的选择,请告诉我您是否需要代码示例。否则,我会保持这篇文章的整洁(并在短期内节省我自己的时间),不会用不必要的源代码把它弄得乱七八糟我刚刚测试了它,并且它可以像预期的那样工作,使用您尝试过的代码。
在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:您把代码放在哪里了?尝试过了。只要工作。假设您有两个名为“help File 1.chm”和“help File 2.chm”的帮助文件,并且您正在从Delphi代码中打开这些帮助文件 要打开帮助文件1,以下代码将起作用:
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.HelpFile := 'Help File 1.chm';
Application.HelpContext(0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.HelpFile := 'Help File 2.chm';
Application.HelpContext(0);
end;
要打开帮助文件2,以下代码将起作用:
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.HelpFile := 'Help File 1.chm';
Application.HelpContext(0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.HelpFile := 'Help File 2.chm';
Application.HelpContext(0);
end;
但要同时打开两个文件,以下代码将导致两个帮助窗口挂起
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;
解决方案:
该问题是由以下事实引起的:帮助文件名中有空格
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;
从文件名中删除空格将解决此问题
以下代码可以正常工作:
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.HelpFile := 'HelpFile1.chm';
Application.HelpContext(0);
Application.HelpFile := 'HelpFile2.chm';
Application.HelpContext(0);
end;
@Frnacois你是对的-它确实有效。问题似乎出在我正在使用的实际帮助文件上,而不是代码上。解决方法是个好主意,但是有第二个应用程序只打开帮助文件可能有些过头了。使用ShellExecute(Handle、'open',PChar('HelpFileName.chm')、nil、nil、SW_SHOWNORMAL)可以获得相同的结果;六羟甲基三聚氰胺六甲醚。。。温多泽问题还是德尔菲问题?怎么知道?