Вопрос по anchor, html-help, delphi-xe2, chm, delphi – Delphi XE2: переход на якорь в CHM?

6

В программе Delphi XE2 как перейти к привязке в разделе справочного файла CHM? Якорь имеет следующий формат (извлечен из источника страницы темы в HTML HelpViewer с файлом CHM):

<a name="my_anchor_id"></a>

Я попробовал следующее:

Application.HelpJump('MyTopicName.htm#my_anchor_id');

К сожалению, это не работает: он переходит к этой теме, но только к началу темы, а не к якору, который несколько прокручивает страницу вниз.

Как бы вы перешли на якорь в теме CHM, используя ALinks? user1580348
Внутри HTML HelpViewer каждая тема представлена своим HTML-именем файла: & quot; [TopicName] .htm & quot ;. Вот почему "Application.HelpJump (" MyTopicName.htm ");" работает. Разве не возможно иметь дело с этим внутренним объектом HTML, как с объектом HTML в браузере? user1580348
Ну, я делаю это в своем приложении с помощью контекстных идентификаторов. Поэтому я используюApplication.HelpContext, Если вы использовали имена, а не идентификаторы, вы бы использовалиHelpJump Похоже. David Heffernan
Может ли быть soem? params плюс javascript? Arioch 'The
Да, было бы хорошо, если бы ты мог. Но вы не можете. Вам нужны ссылки. И идентификаторы темы или названия темы. David Heffernan

Ваш Ответ

1   ответ
3

Прыжок на якорь в ЧМ
Протестировано с Delphi2010 - DelphiXE2 - Windows XP

Как прыгнуть наanchor в файле chm (скомпилированная HTML-справка) с Delphi.

Yes, it is possible with a HtmlHelp() command to jump to an anchor.
<a name="my_anchor"></a>

 HtmlHelp(0,hpPath+'::/Overview.htm#UsingtheMenus>main',HH_DISPLAY_TOPIC,DWORD(nil));

The LINK in : Overview.htm

Note: This link is not needed to jump via the delphi program to
the anchor.(Only for testing).

Overview.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
[...]
<BODY bgColor=#f7f8e2>
<H1>Overview</H1>
<A HREF="Overview.htm#UsingtheMenus">Using the Menus</A>
[...]

The ANCHOR in : Overview.htm

[...]
<A NAME="UsingtheMenus" </A>
<P><STRONG>Using the Menus and Toolbars</STRONG>
[...]

If anyone wants to try it.

Вот больше информации и тестовая программа:

enter image description here

Запустите Project1.exe и выберитеwithout :

enter image description here

Unit1.pas / команда

procedure TForm1.Button2Click(Sender: TObject);
begin
    HtmlHelp(0,hpPath+'::/Overview.htm#UsingtheMenus>main',HH_DISPLAY_TOPIC,DWORD(nil));
end;
click the Button Overview.htm#UsingtheMenus

Результат:

Файл справки открывается иoverview.htm появляется. это былоjumped to the anchor.

enter image description here

Загрузите исходный код Project1.exe D2010 и XE2.
Загрузите исходный файл sample.chm HtmlHelp.

Download

Now let's test the other 2 Buttons

procedure TForm1.HelpKeywordClick(Sender: TObject);
begin
  Application.HelpKeyword('UsingtheMenus');
end;

procedure TForm1.HelpContextClick(Sender: TObject);
begin
  Application.HelpContext(IDH_UsingtheMenus);
end;
Click the Button HelpKeyword('UsingtheMenus')

Результат:

Файл справки открывается иFirstTopic.htm появляется. ТекстUsingtheMenus вставляется в поле поиска.No jump to the anchor!

Click the Button HelpContext(IDH_UsingtheMenus)')

Тот же результат, кроме поля поиска, пуст.

The last 2 clicks demonstrate here:
Естьno secret IDs or keywords в файле HelpFile2 \ sample.chm доступно.

Now we change the help file so что в дополнение кOverview.htm#UsingtheMenus два других метода ведут к успеху.

Close the App 'Project.exe` Run 'Project.exe` again. Make sure the with is selected.

Теперь мы используем & quot; sample.chm & quot; в папке HelpFile \
со следующими настройками.

sample.h

#define IDH_Creating_Projects_and_Topics 1005
#define IDH_Overview 1003
#define IDH_UsingtheMenus 1009

sample.ali

IDH_Overview=Overview.htm
IDH_welcom=FirstTopic.htm
IDH_UsingtheMenus=Overview.htm#UsingtheMenus

sample.hcc

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
[...]
        <LI> <OBJECT type="text/sitemap">
            <param name="Name" value="Using the Menus">
            <param name="Local" value="Overview.htm#UsingtheMenus">
        </OBJECT>   
[...]
</HTML>

sample.hhk

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
[...]
    <LI> <OBJECT type="text/sitemap">
        <param name="Name" value="Using the Menus">
        <param name="Name" value="Using the Menus">
        <param name="Local" value="Overview.htm#UsingtheMenus">
        </OBJECT>   
[...]
</HTML>

Если мы скомпилируем «sample.chm», мы получим сообщение об ошибке.

HHC3015: Warning: An alias has been created to "Overview.htm#UsingtheMenus" but the file does not exist.

Это нормально, потому что файл & quot; Overview.htm # Using theMenus & quot; на самом деле не существует!

Let's try it

Не забудьте, & quot; окно справки & quot; после попытки выполнения каждого из следующих действий снова закройте. В противном случае вы не можете отслеживать различные состояния.

Click the Button HelpKeyword('UsingtheMenus')

enter image description here

Результат:
Файл справки открывается иFirstTopic.htm появляется. ТекстUsingtheMenus вставляется в поле поиска. ТекстUsingtheMenus выбран в списке
Если вы нажметеShow
это былоjumped to the anchor.

Click the Button HelpContext(IDH_UsingtheMenus)')

Результат:

Файл справки открывается иoverview.htm появляется. это былоjumped to the anchor.

click the Button Overview.htm#UsingtheMenus

Результат:

Тот же результат, что и выше.
Файл справки открывается иoverview.htm появляется. это былоjumped to the anchor.

Now we can use one of three methods to jump to the desired mark.

Если кто-то заинтересован в функционировании других кнопок, тогда читайте дальше и получите больше информации.

будет продолжено завтра.

посмотрите на эту часть:Conclusion Yes, it is possible with a HtmlHelp() command to jump to an anchor. Все комментарии говорят (в вопросе OP), что вы не можете перейти к привязке с помощью команды Delphi.<a name="my_anchor_id"></a> @ Дэвид сказал:Yes it would be nice if you could. But you can't. You need A links. And topic IDs or topic names.
Я только что проверил, и начиная с верхней части вашего ответа, я должен был нажать & lt; PgDn & gt;three times прежде чем я мог видетьconclusion, что значитthe answer is not clear, Естьsix more & Lt; & PgDn GT; нажатия клавиш, необходимые для достижения конца вашего ответа оттуда.
Хотя это очень красиво со всеми картинками иbold текст иformatted codeЯ понятия не имею, что именно говорит ваш ответ. Возможно, вы могли бы отредактировать и добавить ответ вверху, чтобы было понятно, о чем вы говорите. Что именно является ответом на «переход на якорь в CHM»? что будущие пользователи найдут здесь, когда поиск найдет этот вопрос и ваш ответ?
ОК, вы правы. Я установлю это в начале.
Я хочу сказать, что сначала вы должны пройтись по всему остальному, пытаясь найти ту часть, которая являетсяconclusion, Если кто-то обнаружит это в поиске в будущем, он, вероятно, не проведет с ним достаточно времени, прежде чем сдаться и перейти к другому результату.conclusion должно быть вверху, а затем вы можете добавить деталиhow your reached it (это почти книга). Если вам нужно потратить 10 минут на чтение ответа, чтобы выяснить, что в нем говорится, на него, вероятно, не стоит смотреть - сначала сделайте заключение, чтобы ответ был ясен.

Похожие вопросы