powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вызвать CHM-справку из программы на Delphi 2010
25 сообщений из 30, страница 1 из 2
Вызвать CHM-справку из программы на Delphi 2010
    #36423359
AndroidZombi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вызвать CHM-справку из программы на Delphi 2010
    #36423497
AndroidZombi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в JCL\JVCL порылся - ничего нету для показа "электронной справки" в формате CHM.
...
Рейтинг: 0 / 0
Вызвать CHM-справку из программы на Delphi 2010
    #36423503
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndroidZombi, а что ShellExecute не работает?
...
Рейтинг: 0 / 0
Вызвать CHM-справку из программы на Delphi 2010
    #36423532
AndroidZombi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57AndroidZombi, а что ShellExecute не работает?

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

Правильно, в топку этот кривой HH, классический WinHelp рулит!
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вызвать CHM-справку из программы на Delphi 2010
    #36423803
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быть может helpware поможет?
(переформатировать справку)
...
Рейтинг: 0 / 0
Вызвать CHM-справку из программы на Delphi 2010
    #36423880
Фотография 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);
...
Рейтинг: 0 / 0
Вызвать CHM-справку из программы на Delphi 2010
    #36423882
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-x
Код: plaintext
1.
  filename := "help.chm";

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

Спасибо, попробую! Вы-то не пробовали сами?
...
Рейтинг: 0 / 0
Вызвать CHM-справку из программы на Delphi 2010
    #36424270
AndroidZombi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вызвать CHM-справку из программы на Delphi 2010
    #36424450
AndroidZombi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
AndroidZombiможно и не chm, тогда, а pdf или rtf...

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


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

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

Почему эта конкретная проблема - никто не высказался. Э-эх, сыскать бы автора StoHtmlHelp,
// Author: Martin Stoeckli
да заставить его проапгэйдить свой код, на который ведь многие наверно уже подсели!
...
Рейтинг: 0 / 0
Вызвать CHM-справку из программы на Delphi 2010
    #36424633
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вызвать CHM-справку из программы на Delphi 2010
    #36424656
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще дополнение по самому 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
Вызвать CHM-справку из программы на Delphi 2010
    #36424671
AndroidZombi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вызвать CHM-справку из программы на Delphi 2010
    #36424698
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по пункту 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
Вызвать CHM-справку из программы на Delphi 2010
    #36424712
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, забыл уточнить - конечно я проверял в D2007. В D2010 проблема может существовать, бесспорно.
...
Рейтинг: 0 / 0
Вызвать CHM-справку из программы на Delphi 2010
    #36424798
AndroidZombi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvAndroidZombiPS "Родной" дельфийский файл HTMLHelpViewer.pas тоже, как тут советовали некоторые, пробовал - кажет пустое окно или "переход отменен".
просто не умеешь. У меня уже давно сделано так:

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

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

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

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

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

Как написано выше, уже получается, при помощи HTMLHelpViewer.pas. С DLL-кой же мороки будет немало, так как справка должна запускаться двояко - по F1 (контекстно) и по команде Справка\Оглавление (тут надо показать понятно что). Так что мороки хватит, но, надеюсь не мне ;-)
...
Рейтинг: 0 / 0
Вызвать CHM-справку из программы на Delphi 2010
    #36425232
AndroidZombi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GatorAndroidZombi> Вы-то не пробовали сами?
Как раз сейчас штудирую. В очередной раз...
Если что получится - поделись уж?
...
Рейтинг: 0 / 0
Вызвать CHM-справку из программы на Delphi 2010
    #36427152
Троицкий А
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К выше сказанному можно добавить следующее.
В общем случае может быть несколько файлов помощи - у каждой формы есть свое свойство 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
Вызвать CHM-справку из программы на Delphi 2010
    #36470099
Mizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57AndroidZombi, а что ShellExecute не работает?

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

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

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


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