|
<< Нажмите, чтобы показать Содержание >> Гипертекст в ТРВ-Редакторе (TRichView) |
TRichView не имеет действий по умолчанию при обработке гипертекстовых событий. Однако он предоставляет удобный способ создания гипертекстовых документов и определения любых действий, которые вы хотите выполнить в ответ на щелчок пользователя по документу. TRichView предоставляет визуальные эффекты для элементов-гиперссылок (подсветку).
Существуют следующие типы гипертекстовых элементов документа:
▪текст, имеющий гипертекстовый стиль;
▪табуляции и текстовые метки, связанные с гипертекстовым стилем;
TRichView выделяет гипертекстовые элементы следующим образом (при наведении указателя мыши на них):
▪изменением цвета текста (TFontInfo.HoverColor, HoverBackColor);
▪подчёркиванием текста (TFontInfo.HoverEffects);
▪изменением курсора мыши (каждый гипертекстовый стиль может иметь свой курсор, см. TRVStyle.JumpCursor, TFontInfo.JumpCursor)
▪изменением изображения в интерактивных значках (такие значки могут иметь два изображения; они должны быть в том же самом компоненте TImageList, но с разными индексами);
По умолчанию основные события гипертекста (OnRVMouseMove, OnJump) и индикация курсора не работают в редакторе (TRichViewEdit). Вместо подсветки элементов под указателем мыши редактор подсвечивает элемент в позиции каретки (редактируемый элемент).
Однако редактор можно переключить в режим гипертекста, когда пользователь нажимает и удерживает клавишу Ctrl , если параметр rvoCtrlJumps присутствует в EditorOptions.
Начиная с версии 1.6, гипертекст работает автоматически в редакторе в режиме только для чтения (а начиная с версии 13, это поведение можно отключить с помощью параметра rvoNoReadOnlyJumps в EditorOptions).
Кроме того, вы можете задать определённые действия в ответ на щелчок пользователя по любому элементу в TRichView, используя события OnRVMouseDown и OnRVMouseUp.
Любая гиперссылка имеет свой собственный идентификатор. Этот идентификатор передаётся в события гипертекста – OnRVMouseMove и OnJump. Первый элемент гипертекста имеет идентификатор, равный RichView.FirstJumpNo, следующий на единицу больше и так далее. По умолчанию RichView.FirstJumpNo=0, и элементы гипертекста имеют идентификаторы 0, 1, 2, ...
Используйте событие OnRVMouseMove, чтобы задать действие при перемещении курсора мыши на гиперссылку. Например, вы можете изменить текст в строке состояния приложения.
procedure TMyForm.MyRichViewRVMouseMove(Sender: TObject; id: Integer); begin if id=-1 then MyStatusbar.SimpleText := '' else MyStatusbar.SimpleText := 'Щёлкни здесь!'; end; |
Специальное значение идентификатора (-1) передаётся в это событие, когда пользователь перемещает указатель мыши за пределы гиперссылки. Это событие никогда не происходит с одним и тем же идентификатором дважды подряд.
Главное гипертекстовое событие – OnJump.
procedure TMyForm.MyRichViewJump(Sender: TObject; id: Integer); begin case id of 0: Application.MessageBox('Ай!','',0); 1: Application.MessageBox('Ой!','',0); 2: Application.MessageBox('Ух!','',0); end; end; |
Способ, показанный в приведённом выше примере (использование идентификатора для определения конкретных действий), был единственным доступным методом в старых версиях TRichView. Теперь вы можете использовать другие способы, описанные ниже.
Обычно информации, содержащейся в кликнутом элементе, достаточно, чтобы понять, что делать. Ключевым методом здесь является GetJumpPointLocation. Эта функция позволяет получить номер нажатого элемента. Например, если у вас есть только текстовые ссылки (без интерактивных рисунков, значков и других нетекстовых элементов) и это URL-адреса, вы можете написать:
uses ..., CRVFData, ShellApi; ... procedure TMyForm.MyRichViewJump(Sender: TObject; id: Integer); var URL: String; RVData: TCustomRVFormattedData; ItemNo: Integer; begin MyRichView.GetJumpPointLocation(id, RVData, ItemNo); URL := RVData.GetItemText(ItemNo); RVOpenURL(URL); end; |
В приведённом выше примере мы используем GetJumpPointLocation для получения документа, содержащего эту гиперссылку (RVData), и номера гипертекстового элемента, по которому был выполнен щелчок (ItemNo).
Далее мы получаем информацию о текстовом элементе, по которому был выполнен щелчок, с помощью GetItemText и используем полученную строку для запуска браузера.
Если у вас есть как текстовые элементы, так и нетекстовые гипертекстовые рисунки или значки, вы можете использовать метод RVData.GetItemStyle для определения типа элемента, а затем использовать GetItemText или GetHotspotInfo/GetPictureInfo. Для интерактивных значков вы можете использовать индексы изображений и имя элемента, чтобы определить, какое действие выполнить.
Способ, показанный в следующем примере, является универсальным. Вы можете использовать теги для добавления своей информации к любому элементу TRichView (см. теги).
uses ..., CRVFData, ShellApi; ... procedure TMyForm.MyRichViewJump(Sender: TObject; id: Integer); var URL: String; RVData: TCustomRVFormattedData; ItemNo: Integer; begin MyRichView.GetJumpPointLocation(id, RVData, ItemNo); URL := RVData.GetItemTag(ItemNo); RVOpenURL(URL); end; |
Вставленные в документ визуальные компоненты не могут быть гиперссылками. Но, конечно, вы можете задать собственные курсоры и события мыши для любого вставленного компонента.
Гипертекст работает не только в основном документе, но и в ячейках таблиц (поддокументах).
Гипертекстовые ссылки нумеруются последовательно по всему документу, включая ссылки в ячейках. Все ссылки в документе имеют уникальные идентификаторы.
Если у вас есть идентификатор гиперссылки, вы можете получить местоположение гипертекстового элемента с помощью следующего метода:
procedure TRichView.GetJumpPointLocation(id: Integer;
out RVData: TCustomRVFormattedData; out ItemNo: Integer);
Гипертекстовый элемент – это элемент с номером ItemNo в объекте RVData.
RVData может быть TRichView[Edit].RVData, ячейка, или RVData редактора ячейки.