我无法弄清楚如何在HTML帮助中使用关键字查找(HH_KEYWORD_LOOKUP
)。如果我有一个如下所示的索引:
Machine
Add
Edit
Selection
如何指定引发机器选择的关键字搜索? “Machine; Selection”调出Machine关键字; “选择”和“机器选择”根本不起作用; “机器,选择”也没有,即使用户手动选择适当的主题,也会显示在HTML帮助查看器的“索引”选项卡中。
答案 0 :(得分:1)
我想我(在我的许多谷歌搜索中)看到HH_KEYWORD_LOOKUP在HTML帮助中被打破,叹了口气。所以我想出了这个解决方案来进行搜索。它将调出chm文件并在搜索框中输入关键字,然后按ENTER键手动进行搜索。
procedure PostKey(aKey: Word; const aShift: TShiftState; aSpeciaKey: Boolean);
type
TShiftKeyInfo = record
shift: Byte;
vkey: Byte;
end;
byteset = set of 0..7;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl); vkey: VK_CONTROL),
(shift: Ord(ssShift); vkey: VK_SHIFT),
(shift: Ord(ssAlt); vkey: VK_MENU));
var
flag: DWORD;
bShift: ByteSet absolute aShift;
i: Integer;
begin
for i := 1 to 3 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
end; { For }
if aSpeciaKey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;
keybd_event(aKey, MapvirtualKey(aKey, 0), flag, 0);
flag := flag or KEYEVENTF_KEYUP;
keybd_event(aKey, MapvirtualKey(aKey, 0), flag, 0);
for i := 3 downto 1 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0),
KEYEVENTF_KEYUP, 0);
end; { For }
end;
procedure CHMSearch(aCHMFilename, aSearch: string);
var
cfn: string;
qry: THHFtsQuery;
hnd: HWND;
procedure DoSearch(aMsg: string);
var
i,n: Integer;
c: Char;
shift: TShiftState;
begin
if hnd = 0 then Exit;
Windows.SetFocus(hnd);
n := Length(aMsg);
if n > 0 then
begin
for i := 1 to n do
begin
c := aMsg[i];
shift := [];
case c of
'a'..'z': shift := [];
'A'..'Z': shift := [ssShift];
'_': // underscore key
begin
keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(VK_OEM_MINUS, 0, 0, 0);
keybd_event(VK_OEM_MINUS, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
continue;
end;
'$': // $ key
begin
PostKey(Ord('4'), [ssShift], False);
continue;
end;
end;
PostKey(Ord(UpCase(c)), shift, False);
end;
PostKey(VK_RETURN, [], False);
PostKey(VK_RETURN, [], False);
end;
end;
begin
cfn := ChangeFileExt(aCHMFilename, '.chm');
FillChar(qry, SizeOf(qry), 0);
qry.cbStruct := SizeOf(THHFtsQuery);
qry.fExecute := TRUE;
HH.HtmlHelpA(GetDesktopWindow, PAnsiChar(AnsiString(cfn)), HH_DISPLAY_TOC, 0);
hnd := HH.HtmlHelpA(GetDesktopWindow, PAnsiChar(AnsiString(cfn)), HH_DISPLAY_SEARCH,
Cardinal(@qry));
DoSearch(aSearch);
end;
答案 1 :(得分:0)
AHAA !!!
经过一个小时的打字和尝试,我发现在第一级关键字和第二级关键字之间需要两个空格,最后需要一个“输入”键来显示从第二个关键字链接的主题!! !!
请记住,正好两个空格!一三个不起作用。诀窍是,在键入第二个空格和第二个关键字时,其他一些关键字会在关键字列表中突出显示,这可能会让您认为您已经犯了错误并且不会继续输入第二个关键字!这是微软工程师的骗局吗?
然而,虽然手动工作,但似乎软件API不能立即使用TWO空间。如果我按下F1键在C#中调用以下API(我必须使用“space”来表示这里的空格,因为如果我使用真实空间,这个网站将两个空格修剪为一个):
System.Windows.Forms.Help.ShowHelp(this,“file:/// C:/apps/MyHelpContentNew/QACT.chm”,System.Windows.Forms.HelpNavigator.KeywordIndex,“key2'space”space “x_subkey_of_key2" );
它不显示从x_subkey_of_key2链接的主题。但它几乎就在那里,帮助窗口显示正确的两级关键字放在搜索TextBox中,只缺少“Car-Return”!
然后我试着像这样添加汽车回报:
System.Windows.Forms.Help.ShowHelp(this,“file:/// C:/apps/MyHelpContentNew/QACT.chm”,System.Windows.Forms.HelpNavigator.KeywordIndex,“key2'space”space “x_subkey_of_key2 \ n“);
它也不起作用。所以我想我需要以编程方式将一个汽车返回键发送到帮助窗口。如果我实施它,将发布。