Главная » Delphi » Справка и пункт О программе для Trace

0

Самый простой способ предоставляет нам программа Trace (см. главу 14), в которой все для отображения HTML-справки уже есть— в том смысле, что компонент WebBrowser установлен и готов к использованию. Я перенес проект из папки Glaval4\2 в новую папку (Glaval 6\1) и расположил там файл с текстом справки tracehlp.htm. Обратите внимание, что в заголовке страницы (в тегах <title> </title») название программы приведено в верхнем регистре (TRACE) для того, чтобы при просмотре через браузер заголовок окна последнего отличался от заголовка окна самой программы, где это название записано, как Trace. Если этого не сделать, то вы попросту не сможете запустить программу одновременно с просмотром Help в браузере— сработает наш механизм предотвращения повторного запуска.

Чтобы отображать и убирать справку одной и той же клавишей, для удобства воспользуемся опять флагом: объявим глобальную переменную с нулевым начальным значением FiagHeip:byte=o. Пункт меню Справка у нас уже имеется, мы создадим в нем подпункт, который также назовем Справка, присвоим ему для краткости имя fx и придадим горячую клавишу также <F1>. Создадим следующий обработчик щелчка на этом пункте:

procedure TForml.FIClick(Sender: TObject); begin / справка F1) if FlagHelp=0 then begin

WebBrowserl.OnBeforeNavigate2:=nil;

if FileExists(Pchar(ExtractFilePath(Application.ExeName) +’tracehlp.htm’))

than

WebBrowserl.Navigate(Pchar(ExtractFilePath

(Application.ExeName)+’tracehlp.htm1)); FlagHelp:=l; end else begin

if FileExists(ftempname) then WebBrowserl.Navigate(Pchar(ftempname)); FlagHelp:=0;

Application.ProcessMessages;

WebBrowserl.0nBeforeNavigate2:=WebBrowserlBeforeNavigate2; end; end;

При первом нажатии у нас в окне браузера показывается текст, при втором — исчезает. Чтобы при повторном нажатии клавиши даже с самого начала, когда еще поиск не производился, окно браузера у нас очищалось, добавим в процедуру oncreate формы создание пустого файла ftemphtm сразу после запуска программы:

procedure TForml.FormCreate(Sender: TObject); begin

ftempname:=ExtractFilePath(Application.ExeName)+’trace000.htm'; assignfile(ftemphtm,ftempname); rewrite(ftemphtm); (создаем временный файл) closefile(ftemphtm) ;

IniFile:=TIniFile.Create(ChangeFileExt(ParamStr(0), ‘.ini’)); {если не было – создаем, иначе открываем)

end;

Но надо и предусмотреть очистку браузера автоматически, когда пользователь жмет на Найти, чтобы не заставлять его производить лишние неочевидные действия. Для этого достаточно включить в процедуру SearchFile самой первой строкой оператор FlagHelp:=0;. Кстати, в таком алгоритме работы есть одна неприятная деталь: располагать внешние ссылки в файле помощи здесь бессмысленно, ведь мы запретили браузеру "выходить наружу" (WebBrowseri.OnBeforeNavigate2:=nii). Если же мы не поставим этого запрещения, то он будет каждый раз вызывать внешний браузер при переходе на метки внутри страницы. Но это только потому, что мы здесь WebBrowser используем в своих целях, при нужде данную ситуацию можно обойти — просто тут это необязательно, ссылку на домашнюю страничку мы поставим в окне О программе, которой сейчас и займемся.

He будем использовать отдельную форму, а поступим так же, как и в случае настроек —? поставим невидимую изначально панель, на которой и расположим все, что требуется. В данном случае сделаем это окно в минималистском стиле: просто продублируем в нем то, что написано в последних строках файла помощи, где приведено имя, e-mail автора и также добавим URL его домашней странички, который, как мы писали ранее, в самом файле Help расположить так просто не получается. Но тут встает интересная задача: а можно ли сделать так, чтобы ссылка в компоненте, например, Label, отображалась именно как ссылка и имела всю нужную функциональность?

Самый простой путь для этого — просто имитировать ссылку с помощью вызова знакомой нам функции sheliExecute. Но чтобы все было "по-взрослому", надо также придать строке соответствующий внешний вид и сделать так, чтобы курсор мыши менялся на изображение руки (в кои-то веки нам реально потребовалось изменить курсор!). Для того чтобы это сделать, удобнее всего просто поставить отдельный компонент, которому и придать все нужные свойства прямо целиком. Использовать мы будем для этой цели, однако, не Label, a Edit, по той причине, что пользователь может захотеть скопировать текст, содержащий существенную информацию — не перейти по ссылке, а просто где-то ее зафиксировать. А из компонента Label, или канвы самой формы, как часто размещают информацию О программе, скопировать ничего нельзя — и пользователь вынужден перепечатывать с экрана фамилию разработчика, название фирмы, какой-нибудь почтовый адрес или телефон, а если есть и интернет-ссылка, которая не работает, как ссылка, то и ее — более идиотскую ситуацию трудно себе представить.

Итак, поставим на форму панель (Panell), очистим у нее заголовок, и придадим ее свойству Font значения "полужирный" 10-го кегля (чтобы не возиться со всеми компонентами в отдельности). Свойству visible придадим значение False. Чтобы панель не мешала нам разглядывать остальные компоненты на форме, мы ее расположим пониже, а при запуске будем устанавливать на нужном уровне динамически. На панель поставим компонент Memo, установим у него свойства Readonly, ParentColor И ParentFont В True, а также уберем рамку, чтобы он слился с фоном (BorderStyle в bsNone). Ниже поставим два компонента Label и два— Edit, у первых надо установить свойство ParentFont В True, а у вторых (Edit4 И Edit5)— СВОЙСТВО Font В "полужир- ный" "подчеркнутый" 10-го кегля и цвета cieiue. Также следует у компонентов Edit установить В True СВОЙСТВО ParentColor И Readonly, СВОЙСТВО Cursor В crHandPoint И ЛИШИТЬ ИХ рамки, как И Memo (BorderStyle В bsNone). В СЭМОМ низу установим кнопку Закрыть (Button6). После того как компоненты будут расставлены, и нужный текст будет в них введен, панель будет иметь вид, показанный на рис. 16.1.

Рис. 16.1. Панель О программе программы Trace

Теперь добавим в меню Справка еще один пункт О программе (назовем Abouti, придадим горячую клавишу <Ctrl>+<Fl>) и напишем для него таком обработчик:

procedure TForal.AboutlClick(Sender: TCbject); begin 10 программе I Panels.Top:=Panel3.Top; Panel-!. Visible:=True; Button6.SetFocus; end;

Чтобы долго не вычислять положение панели, мы просто выводим ее на тог же уровень, что и Настройки. А для кнопки Закрыть сделаем такой обработчик:

procedure TFormi.Button6Click(Sender: TCbject); begin lзакрыть О программе)

Panels .Visible^Falser- end ;

Теперь осталось только сымитировать щелчок по ссылке, как мы писали ранее. Для этого напишем идентичные обработчики для события onclick компонентов Edit4 и Edits (проще написать отдельные обработчики, т. к. процедуры разные):

procedure TForml.Edit4Click(Sender: TCbject); var mst:string; begin /ссылка на e-mail) mst:=’mflilto:’+Edit4.Caption; ShellExecute(Self.Handle,’open1,pChar(mst), NIL,NIL,SW_SHOWNORMAL);

end;

procedure TForml.Edit5Click(Sender: TObject); begin (ссылка на Home Page I ShellExecute(Self.Handle,’open’,pChar(Edit5.Caption), NIL,NIL,SW_SHOWNORMAL);

end;

Теперь возьмемся за остальные наши программы.

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

По теме:

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