В этом посте мы узнаем как в TRichView заставить гиперссылки работать, а также как программно добавить гиперссылку.
Как заставить TrichView понимать гиперссылки?
В своем тестовом примере я уже добавил действие rvActionsResource.rvActionInsertHyperlink1, но этого оказалось недостаточно. Ссылки добавляются, но переход по ним не осуществляется. Для того, чтобы осуществлялся переход, желательно обработать 2 события.
1 2 |
RichViewEdit1.OnJump:=MyRichViewJump; RichViewEdit1.OnRVMouseMove:=MyRichViewRVMouseMove; |
Для перехода достаточно обработать одно событие onJump, второе же для настройки отображения гиперссылки при наведении мыши. Итак, посмотрим что у нас получилось. Рабочий вариант у меня получился таким…
OnCreate
1 2 3 4 5 |
... //---Hyperlinks RichViewEdit1.OnJump:=MyRichViewJump; RichViewEdit1.OnRVMouseMove:=MyRichViewRVMouseMove; ... |
OnJump
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//------------Переход по гиперссылке procedure TMainForm.MyRichViewJump(Sender: TObject; id: Integer); var URL: String; RVData: TCustomRVFormattedData; ItemNo: Integer; begin RichViewEdit1.GetJumpPointLocation(id, RVData, ItemNo); URL := RVData.GetItemTag(ItemNo); ShellExecute(Application.Handle, 'open', PChar(URL), nil, nil, SW_SHOWNORMAL); end; |
OnRVMouseMove
1 2 3 4 |
procedure TMainForm.MyRichViewRVMouseMove(Sender: TObject; id: Integer); begin if id<>-1 then Screen.Cursor:=crHandPoint else Screen.Cursor:=crDefault; end; |
Как программно добавить гиперссылку?
1 2 3 4 5 |
... HyperlinkName:=ExtractFileName(OpenDialog.FileName); RichViewEdit1.CurTextStyleNo:=5; RichViewEdit1.InsertStringTag(HyperlinkName,DestName ); ... |
Тут надо отметить, что сам вид гиперссылок настраивается в компоненте RVStyle в TextStyles. Там можно настроить цвета, подчеркивание, шрифты и так далее…