Шаг 1.4 - Настройка процедур главного окна приложения.
.....Теперь настроим некоторые процедуры главной формы приложения. Перейдем в редактор модуля формы (нажатием клавишы F12) и в разделе implementation введем следующую строку:
uses VLDefinition, hh, hh_funcs;
.....В модуле VLDefinition, который находится в папке ..\Source каталога установки библиотеки, описаны основные глобальные переменные. С помощью них производится обмен ключевой информацией между модулями проложения. Модули hh и hh_funcs предназначены для организации справочной системы в формате CHM. Для этого в окне настроек проекта (см. рис.1.1) в поле HelpFile необходимо указать имя файла справки *.CHM. Кроме этого при настройке свойств форм необходимо обратить внимание на следующие свойства:
TForm.
Свойство |
Значение |
Комментарий |
HelpContext |
... |
Номер окна справки в файле *.CHM |
HelpFile |
... |
Если в справочной системе участвует несколько файлов справки, то укажите в данном свойстве необходимое имя файла, если имя файла одно, оставьте это свойство пустым. В данном случае имя файла будет браться из соответствующего свойства приложения |
HelpType |
htContext |
Тип вызова окон справки - по номеру окна (установлен по умолчанию) |
.....Первое, что мы сделаем для поддержки справочной системы, это обеспечим вывод контекстной подсказки (Hint) в статусной строке главного окна приложения. Для этого в секции public описания класса TPLMCom (формы главного окна) зарегистрируем новую процедуру DisplayHint:
TPLMCom = class(TForm)
...
private
{ Private declarations }
public
{ Public declarations }
procedure DisplayHint(Sender: TObject);
end;
.....Установите курсор где-нибудь на строке описания процедуры и нажмите три клавишы <Ctrl>+<Shift>+<C>. Delphi создаст в теле модуля пустую процедуру. Введите в процедуре две строки, как указано ниже.
procedure TPLMCom.DisplayHint(Sender: TObject);
begin
Application.ShowHint:=True;
// разрешить показывать подсказку
Self.sb.Panels[1].Text := Application.Hint;
// во второй панели стаусной строки показать подсказку
end;
.....В окне Object TreeView встаньте на форму PLMCom (во главе дерева компонентов), в окне инспектора свойств перейдите на закладку Events. Дважды щелкните на событии OnCreate левой кнопкой мыши. Delphi создаст процедуру события FormCreate. Введите в процедуре четыре строки, как указано ниже.
procedure TPLMCom.FormCreate(Sender: TObject);
begin
// событию приложения OnHint (во время просмотра подсказки)
// присвоить указатель на процедуру DisplayHint
Application.OnHint := DisplayHint;
// создать объект mHHelp (описан в модуле VLDefinition)
// типа THookHelpSystem (класс организации справочной системы формата CHM - описан в модуле hh)
mHHelp := THookHelpSystem.Create(Application.HelpFile, '', htHHAPI);
// событиям созданного объекта, вызывающих справку
// присвоить указатели на процедуры, описанные в модуле VLDefinition
mHHelp.HelpCallback1 := HelpButtonEvent;
mHHelp.HelpCallback2 := F1HelpEvent;
end;
.....При работе MDI (многооконного) приложения имеется возможность развернуть дочернее окно на все головное окно прилодения (на весь экран) путем нажатия на соответствующую системную кнопку заголовка или при двойном клике мышкой на заголовке. Однако такой механизм не всегда удобный, т.к. следующее окно, вызываемое каким-нибудь событием также будет в полноэкранном режиме, что не всегда уместно. Наиболее удобен режим, при котором окно развертывается на всю клиентскую область головного окна приложения, но не переходит в полноэкранный режим (как в приложении Delphi).
.....Для организации данного варианта снова перейдем на закладку Events в окне инспектора свойств формы PLMCom и дважды щелкнем левой кнопкой мыши на событии OnPaint. Delphi создаст процедуру события FormPaint. Введите в процедуре две строки, как указано ниже.
procedure TPLMCom.FormPaint(Sender: TObject);
begin
CurClientWidth := Self.ClientWidth - GetSystemMetrics(SM_CXFRAME) -
Self.pnWork.Width - Self.btnspl.Width;
CurClientHeight := Self.ClientHeight - GetSystemMetrics(SM_CYFRAME) -
Self.sb.Height - Self.cb.Height;
// CurClientWidth и CurClientHeight - текущие габариты клиентской части главного окна приложения
// см. файл VLDefinition
end;
.....В данной процедуре более точно рассчитываются свободные габариты клиентской области головного окна приложения, где будут размещатся дочерние (MDIChild) окна. При каждой перерисовке головного окна расчетные данные помещаются в глобальные переменные, описанные в модуле VLDefinition.
.....После компиляции проекта и запуска приложения на выполнение главное окно приложения должно выглядеть так, как показано на рисунке 1.6.
.....На этом закончим первый урок... Далее...