Список вопросов
Как мне на эхотаге написать помощь к моей программе?
Но это так трудно во всём разобраться! ! ! Можно как-нибудь полегче?
А как мне сделать помощь нового стиля: т.е.в виде скомпиленного HTML?
А как все-таки сделать помощь с помощью Helpworkshop.
А как мне сделать помощь нового стиля: т.е.в виде скомпиленного HTML?
А как мне картинку в помощь вставить?
II Интеграция справки в программу.
Как мне “прикрутить”мой файл справки к программе?
Как мне показать какой– либо раздел справки из программы?
Как мне показать какой– либо раздел справки во всплывающем окне?
Как сделать так, чтобы в приложении вызывался хелп с окошечком для поиска раздела?
Как мне показать содержание справки (ну, её оглавление) ?
Как мне сделать, чтобы при нажатии на F1 показывалось окошко с топиком помощи.
Хочу, чтобы у моего окна была кнопочка на Caption`е с вопросиком и при этом помощь работала?
Хочу реализовать попап-меню с пунктиком “что это”.Как это сделать?
III Оперативные подсказки (Hints)
Как мне сделать всплываюшие подсказки для компонентов на форме?
Как мне сделать в меню настроек пункт " Show tips" (или Show hints) ?
Как мне сделать хинты в несколько строчек?
Как мне изменить время до показа подсказки?
Как сделать в панели Status Bar`а подсказку при перемещении мыши?
Как заставить появляться хинт, когда я захочy?
Как изменить внешний вид хинтов (всплывающих подсказок) ?
А как мне сделать хинт какой - нибуть нестандартной формы?
А как мне создать отдельную подсказку (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) .
-В примере перехватывается событие 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