Статьи по Delphi - Help файлы, Работа с Help файлами |
Здравствуйте, гость ( Вход | Регистрация )
Here You Can Support Our Work and .:LavTeaM:. Services |
Статьи по Delphi - Help файлы, Работа с Help файлами |
![]()
Сообщение
#1
|
|
![]() Черный человек ![]() Группа: Модераторы Пользователь №: 9425 Сообщений: 729 Регистрация: 20.01.2005 Из: Междуреченск Загружено: байт Скачано: байт Коэффициент: --- Спасибо сказали: 11 раз(а) ![]() |
Вариант использования HTML Help в Делфи
Код // 1) После Uses... добавляешь: const HH_DISPLAY_TOPIC = $0000; HH_HELP_FINDER = $0000; // WinHelp equivalent HH_GET_WIN_HANDLE = $0006; HH_DISPLAY_TEXT_POPUP = $000E; // display string resource id or text in a popup window HH_HELP_CONTEXT = $000F; // display mapped numeric value in dwData HH_HELP_CONTEXTMENU = $0010; // text popup help // 2) Перед секцией Implementation добавляешь: function HtmlHelp( hwndCaller: HWND; pszFile: string; uCommand: Integer; dwData: integer): HWND; stdcall; external 'hhctrl.ocx' name 'HtmlHelpA'; // 3) В разделе Private у класса формы добавляешь: procedure WMHelp(var aMessage: TWMHelp); message WM_HELP; // 4) В разделе implementation пишешь: // Если смотрим помощь по пунктам меню function GetMenuHelpContext(Menu: TMenu; aMessage: TWMHelp): Integer; begin Result := 0; if (Menu <> nil) then begin Result := Menu.GetHelpContext(aMessage.HelpInfo.iCtrlId, true); if (Result = 0) then Result := Menu.GetHelpContext(aMessage.HelpInfo.hItemHandle, false); end; end; procedure TForm1.WMHelp(var aMessage: TWMHelp); // Предполагается, что класс // формы называется TForm1 var Control: TWinControl; ContextId: integer; hlp: HWND; begin if (aMessage.HelpInfo.iContextType = HELPINFO_WINDOW) then begin Control := FindControl(aMessage.HelpInfo.hItemHandle); // Ищем активный компонент while ((Control <> nil) and (Control.HelpContext = 0)) do Control := Control.Parent; if (Control = nil) then Exit; ContextId := Control.HelpContext; // Смотрим у него HelpContext end else begin ContextId := GetMenuHelpContext(Menu, aMessage); // Для меню if (ContextId = 0) then ContextId := GetMenuHelpContext(PopupMenu, aMessage); end; hlp := HtmlHelp(Handle, 'c:\WINDOWS\Help\joy.chm', HH_HELP_CONTEXT, ContextId); if (hlp = 0) then ShowMessage('Помощь не найдена!'); end; // 5) вместо 'c:\WINDOWS\Help\joy.chm' - подставляешь свой CHM - файл. Пример использования: F1 в запущенной программе Сообщение отредактировал yuansw - 28.09.2005 - 07:41 |
![]() |
|
![]() |
![]()
Сообщение
#2
|
|
![]() Черный человек ![]() Группа: Модераторы Пользователь №: 9425 Сообщений: 729 Регистрация: 20.01.2005 Из: Междуреченск Загружено: байт Скачано: байт Коэффициент: --- Спасибо сказали: 11 раз(а) ![]() |
Вывод справочной информации
Чтобы вывести справочную информацию, которая находится в СНМ-файле, нужно воспользоваться ActiveX-компонентом (элементом управления) Hhopen, который входит в состав Windows и представляет собой специальную динамическую библиотеку (файл Hhopen.ocx). Первое, что следует сделать, — установить компонент Hhopen на одну из вкладок палитры компонентов. Для этого надо из меню Component выбрать команду Import ActiveX Control. На экране появится окно Import ActiveX, в котором будут перечислены все зарегистрированные в реестре Windows компоненты. В окне Import ActiveX, в списке зарегистрированных компонентов, нужно выбрать строку hhopen OLE Control module и щелкнуть на кнопке Install. В результате этого на экране появится диалоговое окно Install, в котором программист может выбрать пакет (package — пакет, библиотека компонентов), в который будет добавлен устанавливаемый компонент. Компоненты, добавляемые программистом, "по умолчанию" добавляются в пакет dclusr. В результате щелчка на кнопке ОК выбранный компонент добавляется в пакет, и на экране появляется окно Package и запрос подтверждения процесса перекомпиляции пакета. По завершении процесса компиляции на экране появится окно, информирующее о том, что компонент добавлен в пакет и зарегистрирован . Значок компонента ньореп будет добавлен на вкладку ActiveX. В процессе компиляции будет создан файл представления компонента -- модуль HHOPENLib_TLIB.pas, который содержит описание методов, свойств и событий компонента. Модуль представления можно увидеть, загрузив его в редактор кода из каталога \Delphi 7\Lib. Пролистав в окне редактора кода модуль HHOPENLib_TLIB.pas, который представляет собой интерфейс для доступа к элементу управления, можно найти описание класса THhopen Код THhopen = class(Telecontrol) private FIntf: _DHhopen; function GetControlInterface: _DHhopen; protected procedure CreateControl; procedure InitControlData; override; public function OpenHelp(const HelpFile: WideString; const HelpSection: WideString): Integer; procedure CloseHelp; property ControlInterface: _DHhopen read GetControlInterface; property DefaultInterface: _DHhopen read GetControlInterface; published property isHelpOpened: WordBool index 1 read GetWordBoolProp write SetWordBoolProp stored False; end; Класс THhOpen предоставляет два метода: OpenHelp и CloseHelp. Метод OpenHelp обеспечивает вывод справочной информации, метод close-Help — закрывает окно справочной системы. У метода OpenHelp два параметра — имя файла справочной информации и имя раздела, содержимое которого будет выведено. В качестве имени раздела надо использовать имя HTML-файла, который применялся программой HTML Help Workshop в процессе создания СНМ-файла. Следует обратить внимание на то, что оба параметра должны быть строками widechar. Следующая программа, ее диалоговое окно приведено на рис. 14.10, а текст — в листинге 14.2, демонстрирует использование ActiveX-компонента Hhopen для вывода справочной информации. Компонент Hhopen добавляется в форму обычным образом. Так как во время работы программы он не отображается, то его можно поместить в любое место формы. Код interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, HHOPENLibJTLB, StdCtrls; type TForm1 = class(TForm)Label1: TLabel; Editl: TEdit; // файл справки Edit2: TEdit; //раздел справки (имя HTML-файла) Button1: TButton; // кнопка Справка Hhopen1: THhopen; // ActiveX-компонент Hhopen Label2: TLabel; Label3: TLabel; procedure ButtonlClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} // щелчок на кнопке Справка procedure TForm1.Button1Click(Sender: TObject); var HelpFile: string; // файл справки HelpTopic: string; // раздел справки pwHelpFile: PWideChar; // файл справки (указатель на строку WideChar) pwHelpTopic: PWideChar; // раздел (указатель на строку WideChar) begin HelpFile := Edit1.Text; HelpTopic := Edit2.Text; // выделить память для строк WideChar GetMemfpwHelpFile, Length(HelpFile) * 2); GetMemfpwHelpTopic, Length(HelpTopic) * 2); // преобразовать Ansi-строку в WideString-строку pwHelpFile := StringToWideChar(HelpFile, pwHelpFile, MAX_PATH * 2) pwHelpTopic := StringToWideChar(HelpTopic, pwHelpTopic, 32); // вывести справочную информацию Form1.Hhopen1.OpenHelp(pwHelpFile, pwHelpTopic); end; end. Вывод справочной информации выполняет процедура обработки события OnClick на кнопке Справка. Так как параметры метода OpenHelp должны быть строками widechar, то сначала выполняется преобразование ANSI-строки В строку WideChar. Сообщение отредактировал yuansw - 28.09.2005 - 07:41 |
![]() |
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 2.08.2025 - 12:41 |