Чтобы вывести справочную
информацию, которая находится в СНМ-файле, нужно воспользоваться ActiveX-компонентом
(элементом управления) ньореп, который входит в состав Windows и представляет
собой специальную динамическую библиотеку (файл Hhopen.ocx).
Первое, что следует
сделать, — установить компонент Hhopen на одну из вкладок палитры компонентов.
Для этого надо из меню Component выбрать команду Import ActiveX Control.
На экране появится окно Import ActiveX, в котором будут перечислены
все зарегистрированные в реестре Windows компоненты. В окне Import ActiveX,
в списке зарегистрированных компонентов, нужно выбрать строку hhopen
OLE Control module и щелкнуть на кнопке Install. В результате этого
на экране появится диалоговое окно Install, в котором программист может
выбрать пакет (packege — пакет, библиотека компонентов), в который будет добавлен
устанавливаемый компонент. Компоненты, добавляемые программистом, "по умолчанию"
добавляются в пакет dciusr. В результате щелчка на кнопке ОК выбранный
компонент добавляется в пакет, и на экране появляется окно Package и
запрос подтверждения процесса перекомпиляции пакета . По завершении процесса
компиляции на экране появится окно, информирующее о том, что компонент добавлен
в пакет и зарегистрирован . Значок компонента ньореп будет добавлен на вкладку
ActiveX. В процессе компиляции будет создан файл представления компонента
-- модуль HHOPENLib_TLIB.pas, который содержит описание методов, свойств и событий
компонента.
Модуль представления
можно увидеть, загрузив его в редактор кода из каталога \Delphi 7\Lib. Пролистав
в окне редактора кода модуль HHOPENLib_TLIB.pas, который представляет собой
интерфейс для доступа к элементу управления, можно найти описание класса тньореп
(листинг 14.1).
Листинг 14.1.
Описание класса THhореn
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;
Класс тньореп предоставляет
два метода: OpenHelp и CloseHelp.
Метод OpenHeip обеспечивает
вывод справочной информации, метод close-Help — закрывает окно справочной системы.
У метода openHeip два
параметра — имя файла справочной информации и имя раздела, содержимое которого
будет выведено. В качестве имени раздела надо использовать имя HTML-файла, который
применялся программой HTML Help Workshop в процессе создания СНМ-файла. Следует
обратить внимание на то, что оба параметра должны быть строками widechar.
Следующая программа,
ее диалоговое окно приведено на рис. 14.10, а текст — в листинге 14.2, демонстрирует
использование ActiveX-компонента Hhopen для вывода справочной информации. Компонент
нпореп добавляется в форму обычным образом. Так как во время работы программы
он не отображается, то его можно поместить в любое место формы.
Рис. 14.10. Окно
программы Использование ActiveX
Листинг 14.2.
Использование компонента Hhopen unit ushh_;
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.ButtonlClick(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.
Вывод справочной информации выполняет процедура обработки события Onciic на кнопке Справка. Так как параметры метода OpenHelp должны быть строками widechar, то сначала выполняется преобразование ANSI-строки В строку WideChar.
Дело в том, что в его постановке и выводах произведена подмена, аналогичная подмене в школьной шуточной задачке на сообразительность, в которой спрашивается:
- Cколько яблок на березе, если на одной ветке их 5, на другой ветке - 10 и так далее
При этом внимание учеников намеренно отвлекается от того основополагающего факта, что на березе яблоки не растут, в принципе.
В эксперименте Майкельсона ставится вопрос о движении эфира относительно покоящегося в лабораторной системе интерферометра. Однако, если мы ищем эфир, как базовую материю, из которой состоит всё вещество интерферометра, лаборатории, да и Земли в целом, то, естественно, эфир тоже будет неподвижен, так как земное вещество есть всего навсего определенным образом структурированный эфир, и никак не может двигаться относительно самого себя.
Удивительно, что этот цирковой трюк овладел на 120 лет умами физиков на полном серьезе, хотя его прототипы есть в сказках-небылицах всех народов всех времен, включая барона Мюнхаузена, вытащившего себя за волосы из болота, и призванных показать детям возможные жульничества и тем защитить их во взрослой жизни. Подробнее читайте в FAQ по эфирной физике.