Гипертекст в ТРВ-Редакторе (TRichView)

<< Нажмите, чтобы показать Содержание >>

Гипертекст в ТРВ-Редакторе (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, чтобы задать действие при перемещении курсора мыши на гиперссылку. Например, вы можете изменить текст в строке состояния приложения.

hmtoggle_arrow1Пример

Специальное значение идентификатора (-1) передаётся в это событие, когда пользователь перемещает указатель мыши за пределы гиперссылки. Это событие никогда не происходит с одним и тем же идентификатором дважды подряд.

Главное гипертекстовое событие – OnJump.

hmtoggle_arrow1Пример

Способ, показанный в приведённом выше примере (использование идентификатора для определения конкретных действий), был единственным доступным методом в старых версиях TRichView. Теперь вы можете использовать другие способы, описанные ниже.

Обычно информации, содержащейся в кликнутом элементе, достаточно, чтобы понять, что делать. Ключевым методом здесь является GetJumpPointLocation. Эта функция позволяет получить номер нажатого элемента. Например, если у вас есть только текстовые ссылки (без интерактивных рисунков, значков и других нетекстовых элементов) и это URL-адреса, вы можете написать:

hmtoggle_arrow1Пример

В приведённом выше примере мы используем GetJumpPointLocation для получения документа, содержащего эту гиперссылку (RVData), и номера гипертекстового элемента, по которому был выполнен щелчок (ItemNo).

Далее мы получаем информацию о текстовом элементе, по которому был выполнен щелчок, с помощью GetItemText и используем полученную строку для запуска браузера.

Если у вас есть как текстовые элементы, так и нетекстовые гипертекстовые рисунки или значки, вы можете использовать метод RVData.GetItemStyle для определения типа элемента, а затем использовать GetItemText или GetHotspotInfo/GetPictureInfo. Для интерактивных значков вы можете использовать индексы изображений и имя элемента, чтобы определить, какое действие выполнить.

Способ, показанный в следующем примере, является универсальным. Вы можете использовать теги для добавления своей информации к любому элементу TRichView (см. теги).

hmtoggle_arrow1Пример

Вставленные в документ визуальные компоненты не могут быть гиперссылками. Но, конечно, вы можете задать собственные курсоры и события мыши для любого вставленного компонента.

Гипертекст и таблицы

Гипертекст работает не только в основном документе, но и в ячейках таблиц (поддокументах).

Гипертекстовые ссылки нумеруются последовательно по всему документу, включая ссылки в ячейках. Все ссылки в документе имеют уникальные идентификаторы.

Если у вас есть идентификатор гиперссылки, вы можете получить местоположение гипертекстового элемента с помощью следующего метода:

procedure TRichView.GetJumpPointLocation(id: Integer;

  out RVData: TCustomRVFormattedData; out ItemNo: Integer);

Гипертекстовый элемент – это элемент с номером ItemNo в объекте RVData.

RVData может быть TRichView[Edit].RVData, ячейка, или RVData редактора ячейки.

См. также...

OnReadHyperlink, OnWriteHyperlink.