Как мне сделать ссылку на тему файла chm из документа Word 2007?

Есть ли способ связать файл chm и в нем с определенной темой из документа Microsoft Word docx? Что-то в строках:

«Для получения дополнительной информации об этом свойстве см. [link ref="./SomeDirectory/somedocument.chm!Sometopic.Somesubtopic" text="MyClass.MyProperty"]


person bitbonk    schedule 21.11.2008    source источник
comment
WAG здесь... Предлагает ли 2007 по-прежнему связывание и встраивание объектов (OLE) в качестве опции вставки?   -  person    schedule 21.11.2008


Ответы (3)


Я не думаю, что простая ссылка на файл .chm сработает.

Для меня работает следующий формат ссылки (обратите внимание, что файл .chm должен находиться в надежном месте, общие сетевые ресурсы не будут работать по умолчанию):

mk:@MSITStore:C:\SomeDirectory\help.chm::/helppage.htm

РЕДАКТИРОВАТЬ

Для относительных путей необходимо использовать следующий шаблон:

ms-it:.\help.chm::/html/main.htm

(см. Связывание с CHM — некоторые примечания)

Эта ссылка будет открыта в IE (щелкните правой кнопкой мыши в средстве просмотра справки HTML, чтобы увидеть расположение этой ссылки в свойствах).

Другим вариантом было бы вставить MACROBUTTON и иметь макрос, открывающий средство просмотра справки HTML. Это будет код VBA:

Declare Function HtmlHelp Lib "HHCtrl.ocx" Alias "HtmlHelpA" _
   (ByVal hwndCaller As Long, _
   ByVal pszFile As String, _
   ByVal uCommand As Long, _
   dwData As Any) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Function GetWindowHandle() As Long
    'obtain Word's hwnd
    'NOTE: there is a possibility of getting the wrong hwnd.  If two word windows
    'are open with the same caption, this *could* happen.  In order to prevent this,
    'you can either change the caption to something strange before trying to find it,
    'or you can compare processId's with GetCurrentProcessId and GetWindowThreadProcessId
    'You can always search the top level windows yourself.

    GetWindowHandle = FindWindow(Word8ClassName, ActiveDocument.Windows(1) & " - " & ActiveDocument.Application.Caption)

End Function

Public Function ShowHelp(strPage As String)

    On Error Resume Next

    HtmlHelp GetWindowHandle, "fullpathtohelpfile.chm", HH_DISPLAY_TOPIC, ByVal strPage

End Function
person Dirk Vollmar    schedule 26.11.2008
comment
По соображениям безопасности мне не разрешено использовать макросы. Однако ссылки mk:@MSITStore:C:\SomeDirectory\help.chm::/helppage.htm работают нормально. Есть только одна проблема: я не могу указать абсолютный путь, а должен использовать относительный (chm и docx всегда находятся в одной папке). - person bitbonk; 28.11.2008

Для того, чтобы найти адрес страницы в chm-файле, вам нужно нажать на страницу (саму страницу, а не на ссылку в дереве содержимого) и выбрать «Свойства». В разделе «Адрес (URL)» вы найдете то, что ищете, например

mk:@MSITStore:D:\Tools\Foo\Bar.chm::/help/base/index.html

И хорошо: вы можете выделить текст на странице свойств с помощью мыши и скопировать его ;-)

Что касается того, как вы должны вставить URL-адрес в слово, чтобы это сработало, я понятия не имею, но короткие пробы и ошибки должны вас туда привести.

person Treb    schedule 26.11.2008
comment
В этом случае файл chm должен находиться в статическом месте, которое никогда не изменяется, поскольку указан абсолютный путь. Было бы намного лучше, если бы был способ указать относительный путь. В моем сценарии клиенту доставляется папка, содержащая как .chm, так и .docx. - person bitbonk; 28.11.2008
comment
Хорошо, просто замените абсолютный путь на относительный: mk:@MSITStore:..\chm\Bar.chm::/help/base/index.html. Я подозреваю, что вам все равно не нужна часть mk:@MSITStore:. - person Treb; 28.11.2008

Вы должны быть в состоянии сделать это, установив гиперссылку на файл и используя якорь заголовка # (я не уверен, как это называется...), но вот пример:

C:\Helpfiles\Help.chm#Topic
person Frank V    schedule 21.11.2008
comment
Но как узнать название темы? Они вложены в chm. C:\Helpfiles\Help.chm#MyClassName не работает сразу. - person bitbonk; 24.11.2008
comment
В файле chm справа у меня есть дерево (примечание: не список) тем. Теперь простое указание имени узла дерева (например, C:\Helpfiles\Help.chm#MySubSubTopic) не дает ожидаемых результатов. Однако #MyMainTopic/MySubTopic/MySubSubTopic также НЕ работает. Мне нужно найти название темы. - person bitbonk; 25.11.2008