Главная » Delphi » Справка для переключателя клавиатуры

0

Напомню, что переключатель клавиатуры LangSwitch (см. главу 7) мы еще не доделали — эта программа, в отличие от остальных наших примеров, обязательно требует автоматической инсталляции — чтобы не заставлять пользователя вносить изменения в системные настройки вручную. Поэтому мы сейчас напишем справку и покажем, как ее выводить, а в дальнейшем доделаем программу, только нужно запомнить, что в текст справки придется внести изменения. Перенесем проект из папки Glava7\3 в новую папку Glaval6\2, причем все, что относится к ловушке (Langhook), мы переносить не будем, за исключением готового файла Langhook.dll — туда вмешиваться нам уже не потребуется. Справку я расположил в файле Lshelp.htm и поместил его в ту же папку.

Начнем с окна О программе. Здесь целесообразно добавить к проекту новую форму — порядка ради пойдем официальным путем, и добавим форму в стиле AboutBox (File | New | Other | Forms | AboutBox). Вообще-то никаких принципиальных удобств в ее использовании нет — ничего такого сверхъестественного она не предлагает, чего нельзя было бы так же просто сделать своими руками. К тому же нам все равно придется исправлять упомянутую ранее концептуальную ошибку— все заготовки для надписей на этой форме реализованы через компоненты Label, и скопировать текст через буфер обмена не получится (рис. 16.2).

Рис. 16.2. Стандартная форма в стиле AboutBox

Компоненты типа Label под названием Product Name, Version И Copyright МЫ используем, заполнив их, правда, не совсем соответствующими названиям надписями, справа от компонента Labeii (где по умолчанию написано comments) поставим Editl и ниже его еще один Edit— Edit2. В них внесем адреса e-mail и домашней странички, а также придадим им свойства (Fonc, ParentColor и т. п.), как мы делали ранее для аналогичных компонентов п Trace. Изменим порядок фокусировки, чтобы кнопка ButtcnOk при отображении формы фокусировалась первой, для этого ее свойство TabOrder установим в значение 0 (у панели тогда оно автоматически станет равным I). В заголовке формы напишем о программе LangSwitch. Назовем образовавшийся модуль About, внесем в его предложение usee модуль ShellApi, и напишем следующие обработчики событий:

procedure TAboutBox.FormCreate(Sender: TObject); begin

Iсо:=TIcon.Create; {иконку для отображения}

instance :=GetModuleHandle(nil); {получаем дескриптор модуля} Iсо. Handle : = L,oadIcon (Instance, ‘MAIN1CON’);

{дескриптор главной иконкиI Programlcon. Picture.Graphic:=Ico; {злру*<зем a Image) end;

procedure TAboutBox. GKBut.tonC.lick (Sender: TObject); begin Ico.Destroy;

About Box. H .i de; / скрываем форму) end;

procedure TAboutBox.EditlClick(Sender: TObject); var mst:string; begin {ссылка на e-injil) mst: = ‘mailto: ‘ f-Editi .Text;

SheliExecute(Self.Handle,’open*,pChar(mst), NIL,NIL,SW_SHOWNORMAL);

end;

procedure TAboutBox.Edi t?.Cl ick (Sender: TObject) ; begin {ссылка на Home Page) SheliExecute(Self.Handle,’open’,pChar(Edit2.Text), NIL, NIL, SW_SHOWNORMAT.) ;

end;

В компоненте image, который тут называется Programlcon, мы и отображаем mainicon программы. Нет никаких проблем и в том. чтобы нарисовать спеки- альную картинку и вставить ее прямо на этапе конструирования или загрузить через ресурсы, как мы делали в главе П. В остальном тут ничего нового нет.

В основной программе мы сразу еще сделаем два пункта всплывающего меню. В секции объявлений добавим константы idmAbout=3 и idmHeip=4 и вставим создание пунктов Справка и О программе через вызов AppendMenu. Затем добавим ниже процедуру создания формы AboutBox (напомню, что в нашей программе ничего автоматически не создается)— туда, где уже есть процедура создания формы Forml Установки. С пунктом Справка разберемся позднее. Итого весь этот фрагмент кода будет выглядеть так:

popMenu:=CreatePopupMenu;

AppendMenu(PopMenu, MF_STRING,idmHelp, ‘Справка’);

AppendMenu(PopMenu,MF_STRING, idmAbout,’О программе1);

AppendMenu(PopMenu, MFjSTBING,idmSets, ‘Установки…’);

AppendMenu(PopMenu, MF_SEPARATOR, 0," );

AppendMenu(PopMenu,MF_STRING,idmEXIT,’Закрыть’);

Forml:^TForml.Create(Application); (создаем экземпляр формы!

AboutBox:=TAboutBox.Create(Application); (создаем форму О программе}

Теперь создадим обработчик щелчка на пункте О программе, добавив В ОКОННОЙ процедуре ПО условию if Msg = wm CCMMAND такую строку:

if wpr =idmAbout then AboutBox.Show; (показываем форму О программе/

Если после запуска мы щелкнем правой кнопкой мыши на иконке программы, а затем по пункту О программе, то получим окно, которое изображено на рис. 16.3. В нем, как и в программе Trace, можно по щелчку запустить почту или загрузить домашнюю страничку через браузер.

Рис. 16.3. Окно О программе LangSwitch

Осталось соорудить отображение справки. Раз уж у нас все равно основное приложение существует только в виде иконки, то зачем нам грузить всякими окнами его и дальше? Давайте больше не будем "пихать" туда формы, а просто вызовем браузер, который установлен в системе по умолчанию:

if wpr =idmfielp then {отображаем Help) ShellExecute(FHandle,’open’,Pchar(ExtractFilePaLh

(Application.ExeWame)+’LShelp.htm’),nil,nil,3W_SHOWNORMAL);

Ну, а в SlideShow мы пойдем для отображения справки и окна О программе еще одним путем.

Источник: Ревнч Ю. В.  Нестандартные приемы программирования на Delphi. — СПб.: БХВ-Петербург, 2005. — 560 е.: ил.

По теме:

  • Комментарии