Главная » Delphi » Справка в SlideShow

0

Перенесем проект SlideShow из папки GlavalS в новую папку (Glava 16\3) и придадим ему номер версии 2.1. Файл со справкой я назвал slide.htm и расположил его в той же папке. Добавим к проекгу новую форму типа Tabbed Pages (File | New | Other | Forms | Tabbed Pages), которая представляет собой форму-диалог с установленным компонентом Pageccncrol. В нем как раз будет три закладки (компонента типа TtabSheet). первую из которых мы назовем Справка, вторую — О программе, а третья зачем? А третью мы назовем Установки и потом перенесем на нее нашу панель с настройками, чтобы все было единообразно. Этот перенос и будет самым хлопотным в переработке программы.

Снизу новой формы, которую мы назовем FormAbout (а модулю дадим имя Abouthelp.pas), имеются три стандартные кнопки, они нам не нужны и мы их удалим вместе с панелью, на которой они установлены. Всю форму немного уменьшим в размерах. На первую закладку поместим наш любимый WebBrowser, а на вторую перенесем прямо через буфер обмена панель со всеми компонентами из предыдущего проекта, с формы AboutBox (для удобства переноса можно просто временно запустить еще один экземпляр Delphi). Внесем в эти компоненты некоторые изменения: во-первых, заменим текст, во-вторых, сделаем шрифт в надписях полужирным и покрупнее, в-третьих, соорудим из заглавной картинки с кленами (она у нас находится в папке Glava2 под названием 0klen2.jpg) маленькую "превьюшку" (IcoKlen2.jpg) размером 66 пикселов по ширине, и вставим ее в компонент Programicon (остальные придется немного при этом сдвинуть). Третью закладку пока не трогаем. Переходим к модулю slide.pas и добавляем к главному меню пункт Справка, а в нем подпункты Справка (под названием fi и с горячей клавишей также <F1>) и О программе (под названием About и с горячей клавишей <Ctrl>+<Fl>). Осталось только для них написать обработчики:

procedure TForml.FIClick(Sender: TObject); begin {Демонстрация справки) if FileExists(ExtractFilePath(Application.ExeName)+’slide.htm1) then

with FormAbout do begin

TabSheetl.Enabled:=True;

WebBrowserl.Navigate(ExtractFilePath(Application.ExeName)+

‘slide.htm’);

Capt i on: =’Справка';

PageControll.ActivePage:=TabSheetl; (выводим вперед СправкуI

ShowModal; end; end;

procedure TForml.AboutClick(Sender: TObject); begin (О программе} with FormAbout do begin

if not FileExists(ExtractFilePath

(Application.ExeName)+’slide.htm’) then TabSheetl.Enabled:=False; Caption:=’О программе';

PageControll .ActivePage:=TabSheet2; (выводим вперед О программе} ShowModal; end; end;

Здесь мы с помощью свойства ActivePage выводим вперед каждый раз нужную закладку. В случае, когда файла помощи не существует, первый пункт меню просто не сработает, а панель О программе все равно будет выводиться, при этом закладка Справка деактивируется. но если файл вдруг каким-то чудом появится, она при очередном обращении к первому пункту будет активирована заново. Закрывать форму FormAbout специально не требуется, она закрывается кнопкой-крестиком на заголовке. Перед компиляцией Delphi, разумеется, предложит добавить форму FormAbout в uses модуля slide.pas, и мы с удовольствием согласимся. Результаты демонстрации справки и О программе для SlideShow представлены на рис. 16.4 и 16.5.

Теперь возьмемся за нелегкую задачу переноса панели настроек. То есть перенести-то как раз се легче всего — надо просто выделить ее целиком, забрать в буфер обмена и вставить в выделенный компонент TabSheet3. Сложности начнутся дальше — во-первых, при попытке компиляции Delphi выдаст нам с полсотни ошибок, но и это тоже не такая уж страшная проблема. Доба-

Рис. 16.4. Вкладка Справка окна Справка SlideShow

 

Рис. 16.5. Вкладка О программе окна Справка SlideShow

вим для начала в модуль Abouthelp ссылку на модуль slide, а потом в модуль preview ссылку на модуль Abouthelp. Затем будем исправлять по очереди все ошибки, на которые нам указывает Delphi. Прежде всего, надо будет везде удалить строку Panei2.visible :=False, остальные исправления, на которые Delphi укажет нам сама, я перечислять не буду — слишком они многочисленны, но в то же время сложностей там никаких нет: сами компоненты (кроме Editl, который теперь называется Edit3, и собственно панели, называющейся теперь Рапе1з) названия сохранили, к ним надо только добавить принадлежность К FormAbout.

А вот те исправления, где подсказок Delphi не будет, я перечислю. Из модуля slide.pas в модуль Abouthelp.pas надо перенести обработчик нажатия кнопки Button2 (которая также сохранила свое название, хотя и Buttonl у нас нет), добавив К нему В конце вместо Panel2.Visible :=False строку с оператором FormAbout. close. Все наименования Editl в этой процедуре надо заменить на Edit3. У самой панели (Рапе13) надо установить свойство visible в True. Содержание обработчика события Editl. KeyDown (он никуда не делся, хотя самого Editl на главной форме уже нет) также надо перенести в модуль Abouthelp.pas, создав обработчик события Edit3KeyDown, а потом приписать компоненту CoiorBoxi, как и было у нас сделано ранее, для аналогичного события ColorBoxlKeyDown ТОТ Же Самый обработчик Edit3KeyDown. Наконец, В конце модуля следует добавить процедуру загрузки справки в браузер в фоновом режиме (иначе при загрузке модуля Abouthelp, например, через пункт Установки, и последующем обращении к закладке Справка, окно браузера окажется пустым). Делается это по событию onEnter компонента PageControii, а по сути это будет просто укороченная процедура демонстрации справки (см. ранее процедуру TForml. Ficiick):

procedure TPagesDlg.PageControllEnter(Sender: TObject); begin {Демонстрация справки} i? FileExists(ExtractFilePath(Application.ExeName)+’slide.htm’) then

with FormAbout do begin

TabSheetl.Enabled:=True;

WebBrowse r 1. Naviga te (Ext ract Fi lePa th (Appl ica tion. ExeName)

‘slide.htm’);

Caption:=’Справка'; end; end;

Наконец, в модуле slide.pas надо сделать одну важную операцию. Все, что в процедуре Forml.create относится к манипуляциям с настройками, надо

13 Зак. 1324

Рис. 16.6. Вкладка Установки окна Справка SlideShow

перенести в обработчик события onActivate той же формы Forml— дело н том, что форма FormAbout. создастся позже Forml, и когда вы обращаетесь к свойствам ее компонентов из обработчика onCreate главной формы, их еще просто не существует. Первую строку из этой процедуры (FormAbout. Labell. caption: = …) следует удалить. Ну, и последнее, что нужно сделать,— переписать обработчик обращения к пункту меню seti (Установки):

procedure TForml.SetlClick(Sender: TObject); begin

/обращение к пункту меню Установки} with FormAbout do begin

if not FileExists(ExtractFilePath(Application.ExeName)

+’slide.htm’) then TabSheetl.Enabled:=False; Caption:=’Установки';

PageControll.ActivePage:=TabSheet3; lвыводим вперед Установки}

ShowModal; end; and;

To что у нас должно получиться, представлено на рис. 16.6.

Ну, вот, кажется, и все с проектом SlideShow. Мы его много раз по ходу дела "перелопачивали", и я надеюсь, что внимательному читателю это пойдет на пользу — при этом мы рассмотрели множество самых разных вариантов реализации тех или иных функций, которые в случае чего можно использовать в своих программах. Наверняка, вы обнаружите ошибки и просто недоработки — не стесняйтесь, пишите.

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

По теме:

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