IPB

Здравствуйте, гость ( Вход | Регистрация )

Статьи по Delphi - Help файлы, Работа с Help файлами
yuansw
сообщение 21.09.2005 - 18:47
Сообщение #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
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
 
Начать новую тему
Ответов
yuansw
сообщение 28.09.2005 - 07:39
Сообщение #2


Черный человек
Иконка группы

Группа: Модераторы
Пользователь №: 9425
Сообщений: 729
Регистрация: 20.01.2005
Из: Междуреченск
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 11 раз(а)



Доступ к справочной информации


Для того чтобы во время работы программы пользователь, нажав клавишу , мог получить справочную информацию, надо чтобы свойство HelpFile главного окна приложения содержало имя файла справочной системы, а свойство HelpContext числовой идентификатор нужного раздела. Вспомните, идентификаторы разделов справочной системы перечислены в разделе [MAP] файла проекта справочной системы.

Файл справочной системы приложения лучше поместить в ту папку, в которой находится файл исполняемой программы.

Для каждого компонента формы, например поля ввода, можно задать свой раздел справки. Раздел справки, который появляется, если фокус находится на компоненте, и пользователь нажимает клавишу , определяется значением свойства Heipcontext этого компонента. Если значение свойства HelpContext элемента управления равно нулю, то при нажатии клавиши появляется тот раздел справки, который задан для формы приложения.

Если в диалоговом окне есть кнопка Справка, то справочная информация выводится по-другому — для кнопки создается процедура обработки события onclick, которая обращением к функции winheip запускает программу Windows Help (файл Winhlp32.exe). При вызове функции winheip в качестве параметров указываются: идентификатор окна, которое запрашивает справочную информацию; имя файла справочной системы; константа, определяющая действие, которое должна выполнить программа Windows Help и уточняющий параметр.

Примечание

Идентификатор окна — это свойство Handle формы приложения. Свойство Handle доступно только во время работы программы, поэтому в списке свойств в окне Object Inspector его нет.

Если необходимо вывести конкретный раздел справки, то в качестве параметра, определяющего действие, используется константа HELP_CONTEXT. Уточняющий параметр в этом случае задает раздел справки, который будет выведен на экран.

Ниже, в качестве примера, приведена процедура обработки события Onclick для кнопки Справка (Button4) диалогового окна программы решения квадратного уравнения.

Код
// щелчок на кнопке Справка
procedure TForm1.Button4Click(Sender: TObject);
begin
 winhelp(Form1.Handle, 'sqroot.hip', HELP_CONTEXT, 1);
end;


HTML Help Workshop

Современные программы выводят справочную информацию в Internet-стиле — окно, которое используется для вывода справки, напоминает окно Internet Explorer. И это не удивительно, так как для вывода справочной информации используются компоненты, составляющие основу Microsoft Internet Explorer. Система отображения справочной информации является частью операционной системы, поэтому никакие дополнительные средства для вывода справочной информации не нужны.

Физически справочная информация находится в файлах с расширением chm. СНМ-файл — это так называемый компилированный HTML-документ. СНМ-файл получается путем компиляции (объединения) файлов, составляющих HTML-документ, который, как правило, состоит из нескольких HTML-файлов.

Процесс преобразования HTML-документа в справочную систему называют компиляцией. Исходной информацией для компилятора справочной системы являются HTML-файлы, файлы иллюстраций и файл проекта. В результате компиляции получается СНМ-файл, содержащий всю справочную информацию.

Наиболее просто создать справочную систему можно при помощи программы Microsoft HTML Help Workshop.

Чтобы создать справочную систему, нужно:

* подготовить файлы справочной информации;
* создать файл проекта;
* создать файл контекста (содержания);
* выполнить компиляцию.

Последние три из перечисленных выше шагов выполняются в программе HTML Help Workshop.

Закрытие файла помощи


При закрытии моего приложения окно помощи (если оно в это время открыто) автоматически не закрывается! Как мне сделать так, чтобы оно также закрывалось автоматически?

Попробуйте так:

Код
Application.HelpCommand(HELP_QUIT, 0);



Использование справки HTML Help


Код
unit uHtmlHelp;

interface
uses Windows;
function HtmlHelpA(hwndCaller: HWND; pszFile: PAnsiChar;
 uCommand: UInt; dwData: DWORD): HWND; stdcall; external 'hhctrl.ocx';

implementation

end.

unit SDIMAIN;
// Main Window
interface

uses........., uHtmlHelp, .....;

const
 HH_CLOSE_ALL = $0012;

 ......
 ......

function TSDIAppForm.FormHelp(Command: Word; Data: Integer;
 var CallHelp: Boolean): Boolean;
begin
 HtmlHelpA(handle, PChar(m_HelpFile), 15, Data);
 CallHelp := true;
end;

procedure TSDIAppForm.FormClose(Sender: TObject;
 var Action: TCloseAction);
begin
 ...........
 HtmlHelpA(handle, PChar(m_HelpFile), HH_CLOSE_ALL, 0);
end;

end.


Сообщение отредактировал yuansw - 28.09.2005 - 07:40
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

Сообщений в этой теме


Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 2.08.2025 - 05:43