gpt4 book ai didi

delphi - 如何在 Delphi 中获取上下文相关帮助以使用符号名称而不是 HelpID 别名?

转载 作者:行者123 更新时间:2023-12-02 00:58:37 24 4
gpt4 key购买 nike

我正在将帮助系统构建到我的程序中,并且正在处理上下文相关的帮助,当按下 F1 时,它应该为事件控件显示适当的帮助页面。

在每个控件上,我可以将 HelpType 设置为 htContext,将 HelpContext 设置为 HelpID,也可以将 HelpType 设置为 htKeyword,将 HelpContext 设置为 HelpID Alias。

但是在我的帮助系统(Dr.Explain)中,我设置了符号名称(即在我的帮助系统中用作书签的一些文本)。这与 HelpID 及其别名不同,可以通过调用 Application.HelpJump(SymbolicName) 从帮助系统访问。

我想使用 HelpContext 字段作为我的符号名称,这比创建一组重复的 HelpID 别名更简单且更易于维护。我不必担心创建帮助映射文件或必须处理它。

这是 Forms 单元中的 HelpKeyword 例程,当 HelpType 为 htKeyword 时处理 F1:

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;

我似乎无法弄清楚如何编写正确的代码来以干净的方式自定义此例程的功能,而不必破解表单单元本身。我怎样才能做到这一点?

或者,是否有另一种方法可以轻松获取上下文相关帮助,以根据符号名称访问我的帮助页面?

作为引用,我使用的是 Delphi 2009(但将在下个月左右升级到 XE2)。

附:标题中的单词是“He-lp”,因为 stackoverflow 不允许我在标题中添加“Help”一词。

最佳答案

在您的 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;

关于delphi - 如何在 Delphi 中获取上下文相关帮助以使用符号名称而不是 HelpID 别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7628832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com