Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вызвать CHM-справку из программы на Delphi 2010 / 25 сообщений из 30, страница 1 из 2
21.01.2010, 16:34
    #36423359
AndroidZombi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
1. Раньше я разрабатывал свою электронную справку в Help & Manual и
сохранял в формате chm, или "HTML Help", то есть, например, "helpfile.chm".
2. Для вызова helpfile.chm из приложения использовался удобный известный файл из DelphiWorld, а именно StoHtmlHelp.pas (www.delphisources.ru/pages/faq/base/chm_use.html). Это замечательно работало из-под Delphi 7, 2007, 2009. А вот в Delphi 2010 вдруг перестало.
3. Что делать - как вызвать CHM-справку из программы на Delphi 2010?

PS "Родной" дельфийский файл HTMLHelpViewer.pas тоже, как тут советовали некоторые, пробовал - кажет пустое окно или "переход отменен".
...
Рейтинг: 0 / 0
21.01.2010, 17:13
    #36423497
AndroidZombi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
Кстати, в JCL\JVCL порылся - ничего нету для показа "электронной справки" в формате CHM.
...
Рейтинг: 0 / 0
21.01.2010, 17:15
    #36423503
Barmaley57
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
AndroidZombi, а что ShellExecute не работает?
...
Рейтинг: 0 / 0
21.01.2010, 17:23
    #36423532
AndroidZombi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
Barmaley57AndroidZombi, а что ShellExecute не работает?

Да работает, конечно...
Только надо, чтоб еще по контексту открывался нужный топик для каждого сфокусированного контрола. Роскошь конечно, только зачем еще нужна "контекстно-чувствительная справка"? А так, отдельный файл - это уж просто электронный документ, можно и не chm, тогда, а pdf или rtf...
...
Рейтинг: 0 / 0
21.01.2010, 19:05
    #36423762
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
AndroidZombiможно и не chm, тогда, а pdf или rtf...

Правильно, в топку этот кривой HH, классический WinHelp рулит!
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.01.2010, 19:34
    #36423803
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
Быть может helpware поможет?
(переформатировать справку)
...
Рейтинг: 0 / 0
21.01.2010, 21:01
    #36423880
sann-x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
а если так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
   // имя файла спарвки 
  filename := "help.chm";

   // файл внутри справки, к-рый нужно открыть 
  page := 'some_page.html';

   // открыть справку 
  ShellExecute( 0 ,  nil , pchar('hh.exe'), pchar('mk:@MSITStore:' + filename +'::/' + page),  nil , 
    SW_SHOWNORMAL);
...
Рейтинг: 0 / 0
21.01.2010, 21:02
    #36423882
sann-x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
sann-x
Код: plaintext
1.
  filename := "help.chm";

Очепятка: должно быть
Код: plaintext
1.
  filename := 'help.chm';
...
Рейтинг: 0 / 0
22.01.2010, 09:01
    #36424268
AndroidZombi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
GatorБыть может helpware поможет?
(переформатировать справку)

Спасибо, попробую! Вы-то не пробовали сами?
...
Рейтинг: 0 / 0
22.01.2010, 09:03
    #36424270
AndroidZombi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
sann-xа если так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
   // имя файла спарвки 
  filename := "help.chm";

   // файл внутри справки, к-рый нужно открыть 
  page := 'some_page.html';

   // открыть справку 
  ShellExecute( 0 ,  nil , pchar('hh.exe'), pchar('mk:@MSITStore:' + filename +'::/' + page),  nil , 
    SW_SHOWNORMAL);


А вот это прикольно, sann-x! Если сработает, то просто THANKS!
...
Рейтинг: 0 / 0
22.01.2010, 10:26
    #36424450
AndroidZombi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
Dimitry Sibiryakov
AndroidZombiможно и не chm, тогда, а pdf или rtf...

Правильно, в топку этот кривой HH, классический WinHelp рулит!


Да особых проблем-то с кривизной HH не было уже 5 лет, а вот сколько кривизны в Delphi...
WinHelp рулит, но в HH есть ряд преимуществ, например:

1. Отображение древовидного оглавления в главном окне.
2. Возможность распечатать документиком сразу целую ветку из этого древовидного оглавления, или - при наличии одного корневого узла-папки - сразу весь CHM.

Почему эта конкретная проблема - никто не высказался. Э-эх, сыскать бы автора StoHtmlHelp,
// Author: Martin Stoeckli
да заставить его проапгэйдить свой код, на который ведь многие наверно уже подсели!
...
Рейтинг: 0 / 0
22.01.2010, 11:33
    #36424633
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
AndroidZombiPS "Родной" дельфийский файл HTMLHelpViewer.pas тоже, как тут советовали некоторые, пробовал - кажет пустое окно или "переход отменен".
просто не умеешь. У меня уже давно сделано так:

- хелп компиляю в chm при помощи старого микрософтовского Help Workshop.
там же есть определения
файл project.h, в нем константы типа
#define IDH_About 1000
#define IDH_Summary 2000
и т.д.
в файле проекта есть секция
[MAP]
#include project.h
и есть алиасы
[ALIAS]
IDH_About=about.htm
IDH_Summary=database.htm
...

в программе:

- uses HTMLHelpViewer - причем давно родной, а не внешний.

- в onCreate главной формы - Application.HelpFile:=ExtractFilePath(ParamStr(0))+Constants.HelpFile;
тут буквально получается Application.HelpFile:='c:\....\project.chm'

- для вызова конкретного раздела из конкретного места:
Application.HelpKeyword('Summary'); где Summary - название страницы

- для вызова контекстного хелпа по F1, в нужной форме просто
прописывается проперть HelpContext в значение, например 1000 - см. выше, это определено для IDH_About.

Основной трах с Help Workshop, но если один раз это дело решить, то потом пойдет много легче. И не надо будет никаких shellexecute :-)
...
Рейтинг: 0 / 0
22.01.2010, 11:41
    #36424656
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
и еще дополнение по самому Help Worksop. в chm можно зашить "свойства" открытия окна хелпа
(Add/Modify window definitions в воркшопе), при этом если скрыть навигационную панель, то пользователя поражает тупняк, и он с вероятностью 99% никогда не догадается нажать кнопку "Показать" в меню chm.
Так что в свойствах проекта нужно обязательно делать включенным
Window with navigation pane, topic pane and button
и не включать
Open with navigation pane closed

также установить Default tab в Contents, чтобы показывась закладка дерева хелпа, а не поиск и т.п.
...
Рейтинг: 0 / 0
22.01.2010, 11:45
    #36424671
AndroidZombi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
AndroidZombi
3. Что делать - как вызвать CHM-справку из программы на Delphi 2010?

PS "Родной" дельфийский файл HTMLHelpViewer.pas тоже, как тут советовали некоторые, пробовал
- кажет пустое окно или "переход отменен".


Итак, постскриптум, господа.

Проблема на сегодняшний день решена, не знаю, надолго ли.

1. От StoHtmlHelp.pas отказался вовсе, так как автор его не поддерживает, и на своем сайте написал, что начиная с Delphi 2005 надо пользовать "родной" дельфийский файл HTMLHelpViewer.pas ()

2. Удалось добиться, чтобы HTMLHelpViewer.pas срабатывал как надо - для этого пришлось передвинуть ссылку на HTMLHelpViewer в списке uses файла проекта из конца uses в самое начало. Если HTMLHelpViewer в начале uses - все работает. Если в конце - или ничего не происходит по команде или событию вызова справки - или такое поведение как в цитате.

Так что судите сами, в чем тут зарыта проблема.
...
Рейтинг: 0 / 0
22.01.2010, 11:53
    #36424698
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
по пункту 2 - неправда. у меня HTMLHelpViewer указан ПОСЕРЕДИНЕ uses. Буквально так:

implementation
uses ibheader, tablestat, indexStat, dlgDb, dbinfofr, dblistfr, constants, options, about,
dbrecom, reinit, utils, DateUtils, math,
HTMLHelpViewer, RegFrm, ib, uGenHwID, RegForm, uFileFunc,
StrData, UTranCalc, DMData, Monitor;

Специально попробовал переставить в начало и конец uses - по барабану, никакой реакции, все как работало, так и работает.

Если на программу влияет изменение порядка модулей, значит в каком-то модуле кто-то определил нечто глобальное, что конфликтует с другим модулем. Или, инициализация одного модуля забивает другую. Других причин такого поведения не знаю.
...
Рейтинг: 0 / 0
22.01.2010, 11:58
    #36424712
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
блин, забыл уточнить - конечно я проверял в D2007. В D2010 проблема может существовать, бесспорно.
...
Рейтинг: 0 / 0
22.01.2010, 12:18
    #36424798
AndroidZombi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
kdvAndroidZombiPS "Родной" дельфийский файл HTMLHelpViewer.pas тоже, как тут советовали некоторые, пробовал - кажет пустое окно или "переход отменен".
просто не умеешь. У меня уже давно сделано так:

- хелп компиляю в chm при помощи старого микрософтовского Help Workshop.
[...]
Основной трах с Help Workshop, но если один раз это дело решить, то потом пойдет много легче. И не надо будет никаких shellexecute :-)
...
Рейтинг: 0 / 0
22.01.2010, 12:24
    #36424819
AndroidZombi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
kdvAndroidZombiPS "Родной" дельфийский файл HTMLHelpViewer.pas тоже, как тут советовали некоторые, пробовал - кажет пустое окно или "переход отменен".
просто не умеешь. У меня уже давно сделано так:

- хелп компиляю в chm при помощи старого микрософтовского Help Workshop.
[...]
Основной трах с Help Workshop, но если один раз это дело решить, то потом пойдет много легче. И не надо будет никаких shellexecute :-)

Извиняюсь, забыл написать-то...
Просто не понимаешь. Файл-то chm "хороший", хоть я и умею делать его только Help-Manual-ом, а варкшопом-нет. Глюк получается, имхо, из-за делфи. Тем не менее, твоя инфа весьма интересна. Спасибо.
...
Рейтинг: 0 / 0
22.01.2010, 12:44
    #36424882
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
AndroidZombi> Вы-то не пробовали сами?
Как раз сейчас штудирую. В очередной раз...
...
Рейтинг: 0 / 0
22.01.2010, 12:54
    #36424916
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
to AndroidZombi

Если ничего не получается в новой Delphi, можно было бы написать на старой Delphi маленькую DLL с единственной функцией, вызывающей справку и использовать эту DLL из новой. И мороки будет меньше, и результат получишь быстрее.
...
Рейтинг: 0 / 0
22.01.2010, 12:55
    #36424918
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
Кроик Семён, +1
...
Рейтинг: 0 / 0
22.01.2010, 14:10
    #36425220
AndroidZombi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
Кроик Семён to AndroidZombi

Если ничего не получается в новой Delphi, можно было бы написать на старой Delphi маленькую DLL с единственной функцией, вызывающей справку и использовать эту DLL из новой. И мороки будет меньше, и результат получишь быстрее.

Как написано выше, уже получается, при помощи HTMLHelpViewer.pas. С DLL-кой же мороки будет немало, так как справка должна запускаться двояко - по F1 (контекстно) и по команде Справка\Оглавление (тут надо показать понятно что). Так что мороки хватит, но, надеюсь не мне ;-)
...
Рейтинг: 0 / 0
22.01.2010, 14:13
    #36425232
AndroidZombi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
GatorAndroidZombi> Вы-то не пробовали сами?
Как раз сейчас штудирую. В очередной раз...
Если что получится - поделись уж?
...
Рейтинг: 0 / 0
24.01.2010, 02:02
    #36427152
Троицкий А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
К выше сказанному можно добавить следующее.
В общем случае может быть несколько файлов помощи - у каждой формы есть свое свойство HelpFile.
Для назначения пути к файлам, назначения файла помощи по умолчанию, а также для переопределения поведения THTMLHelpViewer может быть полезно реализовать интерфейс IHtmlHelpTester
Назначение методов должно быть понятно из их названия.
Метод ConvertWinHelp полезен для "нормализации" работы стандартных Action (THelpTopicSearch, THelpOnHelp и т.д.).
Под D2010 все хорошо работает.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
 //TDataModule выбран для примера, реализовать интерфейс можно в любом удобном классе, например главном окне 
 type 
  TDM =  class (TDataModule, IHtmlHelpTester)
  ...
   protected 
     function  CanShowALink( const  ALink, FileName:  String ): Boolean;
     function  CanShowTopic( const  Topic, FileName:  String ): Boolean;
     function  CanShowContext( const  Context: Integer;
                             const  FileName:  String ): Boolean;
     function  GetHelpStrings( const  ALink:  String ): TStringList;
     function  GetHelpPath :  String ;
     function  GetDefaultHelpFile:  String ;
     function  ConvertWinHelp( var  Command: Word;  var  Data: LongInt): Boolean;
  ...

 function  TDM.CanShowALink( const  ALink, FileName:  String ): Boolean;
 begin 
  Result := true;
 end ;

 function  TDM.CanShowContext( const  Context: Integer;
   const  FileName:  String ): Boolean;
 begin 
  Result := true;
 end ;

 function  TDM.CanShowTopic( const  Topic, FileName:  String ): Boolean;
 begin 
  Result := true;
 end ;

 function  TDM.GetHelpStrings( const  ALink:  String ): TStringList;
 begin 
  Result := TStringList.Create;
  Result.Add(': ' + ALink);
 end ;

 function  TDM.GetDefaultHelpFile:  String ;
 begin 
   if  Application.HelpFile <> ''  then 
    Result := Application.HelpFile
   else 
   if  Application.MainForm.HelpFile <> ''  then 
    Result := Application.MainForm.HelpFile
   else 
    Result := ChangeFileExt(Application.ExeName, '.chm');
 end ;

 function  TDM.GetHelpPath:  String ;
 begin 
  Result := ExtractFilePath(Application.ExeName);
 end ;

 function  TDM.ConvertWinHelp( var  Command: Word;  var  Data: Integer): Boolean;
 begin 
   if  (Command =  11 ) {HELP_FINDER}   and  (Data =  0 )  then    //THelpContents 
    Command :=  1    {HH_DISPLAY_TOC} 
   else 
   if  (Command =  11 ) {HELP_FINDER}    and  (Data <>  0 )  then   //THelpTopicSearch; Data=PChar('') 
    Command :=  3   {HH_DISPLAY_SEARCH} 
   else 
   if  (Command =  4 ) {HELP_HELPONHELP}   then   //THelpOnHelp 
    Command :=  3 ;  {HH_DISPLAY_SEARCH} 
  Result := true;
 end ;
...

 procedure  TDM.DataModuleCreate(Sender: TObject);
 begin 
  HtmlHelpViewer.HtmlHelpTester := Self;
...

...
Рейтинг: 0 / 0
15.02.2010, 15:17
    #36470099
Mizer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать CHM-справку из программы на Delphi 2010
Barmaley57AndroidZombi, а что ShellExecute не работает?

а у меня не работает (я по С++)
делаю:

WinExec("hh.exe -mapid 106 c:\\wds.chm",SW_SHOWNORMAL);

появляется курсорчик процесса и ничего не показывает
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вызвать CHM-справку из программы на Delphi 2010 / 25 сообщений из 30, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]