Организация справочной системы вашего приложения.


Список вопросов

I Создание файла справки

 

Как мне на эхотаге написать помощь к моей программе?

Но это так трудно во всём разобраться! ! ! Можно как-нибудь полегче?

А как мне сделать помощь нового стиля: т.е.в виде скомпиленного HTML?

А как все-таки сделать помощь с помощью Helpworkshop.

А как мне сделать помощь нового стиля: т.е.в виде скомпиленного HTML?

А как мне картинку в помощь вставить?

II Интеграция справки в программу.

 

Как мне “прикрутить”мой файл справки к программе?

Как мне показать какой– либо раздел справки из программы?

Как мне показать какой– либо раздел справки во всплывающем окне?

Как сделать так, чтобы в приложении вызывался хелп с окошечком для поиска раздела?

Как мне показать содержание справки (ну, её оглавление) ?

Как мне сделать, чтобы при нажатии на F1 показывалось окошко с топиком помощи.

Хочу, чтобы у моего окна была кнопочка на Caption`е с вопросиком и при этом помощь работала?

А как тоже самое сделать без кнопочки на Caption, т.е.чтоб курсор с вопросиком появился по нажатию моей кнопочки?

Хочу реализовать попап-меню с пунктиком “что это”.Как это сделать?

Как мне показать пользователю правила работы со справкой, то есть помощь к помощи (простите за каламбур! ) ?

III Оперативные подсказки (Hints)

 

Как мне сделать всплываюшие подсказки для компонентов на форме?

Как мне сделать в меню настроек пункт " Show tips" (или Show hints) ?

Как мне сделать хинты в несколько строчек?

Как мне изменить время до показа подсказки?

Как сделать в панели Status Bar`а подсказку при перемещении мыши?

Как заставить появляться хинт, когда я захочy?

Как изменить внешний вид хинтов (всплывающих подсказок) ?

Как изменить шрифта hint'а?

А как мне сделать хинт какой - нибуть нестандартной формы?

А как мне создать отдельную подсказку (hint) для каждой ячейки StringGrid?

 

Создание файла справки.

 

!- Как мне на эхотаге написать помощь к моей программе?

!-А никак.Воспользуйтесь программой Helpworkshop из поставки Delphi (лежит в каталоге %Delphi%\Help\tools) и редактором Microsoft Word или другим, способным создавать файлы в формате RTF и понимающем концевые сноски.Только хочу сразу предупредить, что воркшоп, идущий в поставке Делфи 3 не понимает RTF 97го ворд`а.Можно (лучший выход) или скачать новую версию воркшопа с сайта Микрософт`а (он бесплатный, Яндекс вам поможет) или (выход похуже) использовать ворд 95.Прочитайте помощь к воркшопу, там достаточно подробно описан весь процесс (правда, на английском языке) .

Вернутся к содержанию


!- Но это так трудно во всём разобраться! ! ! Можно как ни будь полегче?

!-Можно.Надо использовать инструменты третьих фирм.Неплохие программы: Help & Manual (Позволяет создавать как помощь в формате WinHelp так и в виде HTML) , Help Scribble, есть так же такая вещь - Instant Help называется.Это шаблон для ворда.Применяя определённые стили, подготавливается документ, который переводится в проект для Help Workshop.Можно смотреть, что получилось, и понять, как надо.

Вернутся к содержанию


!- А как мне сделать помощь нового стиля: т.е.в виде скомпиленного HTML?

!-Сами файлы делаются " Microsoft HTML Help Workshop" , а содержимое любым HTML-Editor-ом, хоть тем же FrontPage.При этом не надо забывать, что их могут не увидеть пользователиWindows95/NT у которых нет IE4/5.Да и с привязкой топиков к контролам программы будет некоторая сложность…

Вернутся к содержанию


!- А как все-таки сделать помощь с помощью Helpworkshop.А то я покопался и ничего не понял.Как подготовить текст и сделать линки?

!-- Ну, только в общих чертах.Создаём в Ворде текст помощи.Каждый топик (раздел) отделяем от предыдущего разрывом страницы.Заголовки разделов желательно оформить каким-либо стилем, например “ Заголовок1 ”.Далее начинаем расставлять концевые сноски, помечая ими заголовки, а если раздел без заголовка, то первое предложение заголовка.Сноска должна стоять перед текстом.Можно пометить заголовок сразу несколькими видами сносок.Наиболее важные типы сносок:

# - Задаёт идентификатор раздела справки, который может быть использован для перехода к этому разделу из других топиков.

$ - Задаёт имя раздела справки в списке поиска и списке просмотренных тем во время использования справки.

K – Задаёт список ключевых слов, по выбору которых в диалоге поиска будет сделан переход на топик помеченный этим словом.

Теперь немного о линках – они бывают двух типов – Jamp (переход) и Popup (всплывающее окно с комментарием) .Первые при работе справки имеют вид зелёного цвета слов и одинарно подчеркнуты сплошной линией, вторые – прерывистой.Размечаем линки так:

Для Jamp :

1 Выделяем слово, которое должно быть линком и помечаем его двойным подчёркиванием.

2 СРАЗУ за ним (без пробела! ! ! ) пишем идентификатор того раздела, к которому надо перейти (то, что писали в тексте # - сноски) .

3 Помечаем текст идентификатора как скрытый.

4 Для Popup – всё так же, только подчеркивание в пункте 1 одинарное.

Всё это сохраняем в виде RTF.

Создаем в HelpWorkShop новый проект.Жмем Files и указываем путь к нашему файлу.Жмем Windows и настраиваем параметры окна справки – цвет, размеры, заголовок, и.т.д.

Если мы хотим показывать топики из программы, то надо еще проделать следующее – нажать Map и указать там для каждого идентификатора раздела соответствующее число (его мы будем писать в Help Context контролов) .

Жмём на кнопку с “мясорубкой” и, если всё правильно сделали, получаем готовый HLP – файл.Если нет – читаем репорт об ошибках и устраняем их.

Вернутся к содержанию


!- А как мне картинку в помощь вставить?

!-Или вставляй в Ворде как обычно или (что лучше) почитай помощь к воркшопу.Иногда помогает.

Вернутся к содержанию


 

II Интеграция справки в программу.

!- Как мне “прикрутить” мой фаил справки к программе?

!-Project -> Options…-> Application > Help file и указываем путь к своему файлу

Правда, более корректно будет сделать так: при инсталляции программы прописать в реестре путь к справке, в OnCreate формы прочитать это значение и далее сделать так:

Application.HelpFile: : =MyHelp; // Полный путь к файлу помощи

Вернутся к содержанию


!- Как мне показать какой – либо раздел справки из программы?

!- Application.HelpContext(1) – произойдёт переход к разделу справки с числовым идентификатором 1 (что писали в MAP проекта справки) ;

Вернутся к содержанию


!- Как мне показать какой – либо раздел справки во всплывающем окне?

!- Application.HelpCommand(HELP_CONTEXTPOPUP, 1) ; Где 1- номер раздела

Вернутся к содержанию


!- Как сделать так, чтобы в приложении вызывался хелп с окошечком для поиска раздела?

!-Используйте следующую процедурку:

procedure TForm1.HelpSearch;
var S: String;
begin  S : = '';
 Application.HelpCommand( HELP_PARTIALKEY, LongInt(@S));
end ;

Вернутся к содержанию


!- Как мне показать содержание справки?

!- Application.HelpCommand(HELP_CONTENTS, 0) ;

Или Application.HelpCommand(HELP_FINDER, 0) ; при наличии у вашей справки .CNT – файла (Более предпочтительный вариант) ;

Вернутся к содержанию


!- Как мне сделать, чтобы при нажатии на “кнопку в верхнем левом углу клавиатуры” (F1) показывалось окошко с топиком помощи к контролу с установленным фокусом.

!-“Прикрутить” файл помощи, как в первом совете и в свойствах “HelpContext” компонентов вписать идентификаторы (что писали в MAP проекта справки) ;

Вернутся к содержанию


!- Хочу, чтобы у моего окна была кнопочка на Caption`е с вопросиком и при этом помощь работала?

!- Установить в свойствах формы BorderIcons: = [biSystemMenu, biHelp] – именно это сочетание! ! ! И выполнить предыдущий совет.

Вернутся к содержанию


!- А как тоже самое сделать без кнопочки на Caption, т.е.чтоб курсор с вопросиком появился по нажатию моей кнопочки?

!-Вот таким образом:

procedure TForm1.HelpButtonClick(Sender: TObject);
begin
  Perform(WM_SYSCOMMAND, SC_CONTEXTHELP, 100);
end;

Вернутся к содержанию


!- Хочу реализовать попап-меню с пунктиком “что это”.Как это сделать?

!-Создать попап-меню с пунктом “что это такое? ”.Прописать это меню в свойствах PopapMenu всех контролов.Установить значения HelpContext`а (см.выше) .На OnClick пункта “что это такое? ” вешаем следующий обработчик:

procedure TForm1.WhatIsClick(Sender: TObject) ;
begin
  If PopupMenu1.PopupComponent is TWinControl then
  Application.HelpCommand(HELP_CONTEXTPOPUP, (PopupMenu1.PopupComponent as TWinControl).HelpContext)
end;

Вернутся к содержанию


!- Как мне показать пользователю правила работы со справкой, то есть помощь к помощи (простите за коломбур! ) ?

!- Application.HelpCommand(HELP_HELPONHELP, 0) ;

Но если у вас Win98 то помощь покажет работу с HTML – справкой, даже если ваш файл в HLP – Формате

Вернутся к содержанию


 

III Оперативные подсказки (Hints)

!- Как мне сделать всплываюшие подсказки для компонентов на форме.В Си обычно применяют особый класс окна tooltips_windows.А как это сделать на Delphi?

!- Borland/Inprise по каким - то причинам решили не использовать стандартные подсказки windows, а создали свой класс THintWindow.Весь механизм подсказок уже за вас реализованн на уровне Application.Чтобы сделать всплываюшие подсказки для компонентов на форме, вам всего лишь надо:

Заполнить свойсво Hint всех компонентов,
Установить ShowHint : = true;

Вернутся к содержанию


!- В некотрых программах в меню настроек есть пункт " Show tips" (или Show hints) и можно разрешать / запрещать появление подсказок.У меня много компонентов на форме и каждай раз делать ShowHint : = true / false неоптимально, можно ли как-то по другому?

!- Для этого есть свойство ParentShowHint .Его значение по умолчанию true, что нам и нужно.Пропишите следующий обработчик OnClick для своего пункта меню " Show tips" :

procedure TForm1.ShowTipsClick(Sender: TObject) ;
begin
  (Sender as TMenuItem) .Checked : = not (Sender as TMenuItem) .Checked;
  ShowHint : = (Sender as TMenuItem) .Checked;
end;

Вернутся к содержанию


!- У многих программ хинты сделанны в несколько строчек.Мне такое не удалось сделать - редактор Objct inspector`а не позволяет всталять символ окончания строки! Есть ли выход?

!-Есть 3 варианта:

1.Поставить RxLib . Она заменяет стандартный редактор на свой, который позволяет вводить многострочные подсказки.

2.В устанавливать свойства Hint в run-time:

   MyButton.Hint : = 'First hint lihe'+#13#10+'Last hint line';

3.Открыть форму " As text" и правим

  было Hint = 'First hint lihe Last hint line'

  стало Hint: = 'First hint lihe'+#13#10+'Last hint line'

Вернутся к содержанию


!- Как мне изменить время до показа подсказки и время через которое она убирается с зкрана.

!- У Application есть такие свойства:

HintPause - время в ms -определяет интервал времени от помещения указателя на элемент управления до появления подсказки.По умолчанию 500 ms (0, 5 сек.) .

HintHidePause - время в ms -определяет интервал времени от появления подсказки до её скрытия, если мышь не передвигалась по элементу управления.По умолчанию 2500 ms (2, 5 сек.) .

HintShortPause - время в ms -определяет интервал времени до следуюшего появления подсказки, если она уже показанна.Необходимо для предотвращения нежелательного мерцания при быстром передвижении мыши по тулбарам и.т.д.По умолчанию 50 ms (0, 05 сек.).

Вернутся к содержанию


!- В некотрых программах в панели Status Bar`а при перемещении мыши появляется подсказка.Как это сделать?

!-В этом случае все Hint контролов должны состоять из двух частей, разделённых при помощи " | " , первая часть будет показыватся во всплываюшей подсказке, вторая, более подробная - в панели, например:

 

hint: ='вырезать|вырезать выделенный фрагмент текста'

Далее создаем следующий обработчик, не забыв поместить его объявление в секцию private :

procedure TForm1.DisplayHint(Sender: TObject) ;
begin
  StatusBar1.Panels.Items[0].Text : = Application.Hint;
end;

На FormActivate вешаем следующее:

procedure TForm1.FormActivate(Sender: TObject) ;
begin
  Application.OnHint : = DisplayHint;
  StatusBar1.Panels.Items[0].Text : ='';
end;

Вернутся к содержанию


!- Как заставить появляться хинт, когда я захочy?

!-Тут есть несколько методов

1 - напрямую создать THintWindow

var

H: THintWindow;

{Появление}

procedure Form1.ShowMyHint;
begin
  if h< > nil then H.ReleaseHandle; {если чей-то хинт yже был, то его погасить}
   H: =THintWindow.Create(Окно-владелец хинта ) ;
  H.ActivateHint(H.CalcHintRect(...) , 'hint hint nint') ;
end;

{UnПоявление - это возможно пpидется повесить на таймеp, котоpый бyдет обнyляться пpи каждом новом появлении хинта}

procedure Form1.HideMyHint;
begin
   if h<> nil then H.ReleaseHandle;
end;

2 - " подвигать мышью" - программно установить курсор мыши на контролл:

procedure TForm1.Button1Click(Sender: TObject) ;
var
pt : TPoint;
begin
  {Позволим перерисовку кнопки}
  Application.ProcessMessages;
  {Получаем координаты экрана для центра кнопки}
  pt : = ClientToScreen(Point(Button1.Left + Button1.Width div 2, Button1.Top + Button1.Height div 2) ) ;
  {Устанавливаем курсор на центр кнопки}
  SetCursorPos(Pt.x, Pt.y) ;
end;

Вернутся к содержанию


!- Как изменить внешний вид хинтов (всплывающих подсказок) ?

!-1.Создаем свой класс - потомок от THintWindow

type
 TCustomHint = class (THintWindow)
public
  constructor
Create(AOwner: TComponent) ; override;
  end;

Пpимечание 1.Этот способ не позволит изменить цвет шpифта - для этого пpидется пеpекpывать метод Paint;
Пpимечание 2.Если пеpекpыть CreateParams, то можно, напpимеp, наpисовать Hint в фоpме облачка.
Пpимечание 3.Для изменения цвета фона F1 TApplication.OnShowHint, HintInfo.

2.Меняем фонт:

constructor TCustomHint.Create(AOwner: TComponent) ;
begin
   inherited Create(AOwner) ;
with Canvas.Font do // Именно так, а не пpосто Font!
    begin
    Name : = 'Times New Roman Cyr';
    Style : = [fsBold, fsItalic];
    Size : = 40;
    end;
end;


3.Устанавливаем новый хинт

procedure TForm1.FormCreate(Sender: TObject) ; // Это может быть любой обpаботчик
begin
  HintWindowClass : = TMyHint; // Устанавливаем глобальную пеpеменную
  Application.ShowHint : = false; // Application.FHintWindow.Free
  Application.ShowHint : = true; // Application.FHintWindow.Create
end;

Литеpатуpа:
1.<DELPHI> \Source\VCL\Forms.pas (TApplication) .
2.< DELPHI> \Source\VCL\Controls.pas (THintWindow) .
3.Delphi Help (OnShowHint, THintInfo) .

Вернутся к содержанию


!- Как изменить шрифта hint'а?

!-В примере перехватывается событие Application.OnShowHint и изменяется шрифт Hint'а.

type
 TForm1 = class (TForm)
   procedure ;FormCreate(Sender: TObject) ;
public
{Public declarations}
   procedure MyShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo) ;
end;

var Form1: TForm1;

implementation
{$R *.DFM}

procedure TForm1.MyShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo) ;
var
i : integer;
begin
  for i : = 0 to Application.ComponentCount - 1 do
   if Application.Components[i] is THintWindow then
     with THintWindow(Application.Components[i]) .Canvas do
   begin
    Font.Name: = 'Arial';
    Font.Size: = 18;
    Font.Style: = [fsBold];
    HintInfo.HintColor: = clWhite;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject) ;
begin
 Application.OnShowHint : = MyShowHint;
end;

Вернутся к содержанию


!- А как мне сделать хинт какой - нибуть нестандартной формы

!-Использовать RxLib , там есть почему-то недокументированный хелпе модуль RxHints \

В OnCreate вашей формы напишите следующее:

RXhints.SetHintStyle(Style, ShadowSize, Tail, Alignment) ;
Где первый параметр - THintStyle (форма хинта) , может принимать такие значения: hsRectangle, hsRoundRect, hsEllipse;
Второй параметр - THintShadowSize (величина тени) 0..15;
Третий параметр - Tail (показывать ли указатель от курсора до хинта (ну, как обычно рисуют в комиксах) ) true/false;
Четвёртый параметр - выравнивание текста.

Вернутся к содержанию


 

!- А как мне создать отдельную подсказку (hint) для каждой ячейки StringGrid?

!-В приведенном примере отслеживается движение курсора мыши - при перемещении между ячейками StringGrid'а - появляется окно подсказки(hint) , показываеющее номер текущей строки и колонки.

type
 StringGrid1: TStringGrid;
   procedure StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer) ;
   procedure FormCreate(Sender: TObject) ;
  private
{Private declarations}
  Col : integer;
  Row : integer;
  end;
var
 
Form1: TForm1;

implementation
 {$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject) ;
begin
  StringGrid1.Hint : = '0 0';
  StringGrid1.ShowHint : = True;
end;

procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer) ;
var
 r : integer;
 c : integer;
begin
 StringGrid1.MouseToCell(X, Y, C, R) ;
  with StringGrid1 do begin
   if ((Row < > r) or(Col < > c) )    then begin Row : = r;
    Col : = c;
    Application.CancelHint;
    StringGrid1.Hint : =IntToStr(r) +#32+IntToStr(c) ;
    end;
  end;
end;

Вернутся к содержанию


 

 

 

Все дополнения, пожелания, замечания и обнаруженные ошибки просьба слать нетмайлом или на! boa@kursknet.ru

 

Hosted by uCoz