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
сообщение 24.09.2005 - 01:05
Сообщение #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
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

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


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

 



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