Вопрос пользователя заключается в необходимости создания гиперссылок в компоненте TRichEdit, которые начинаются не с www или http, а с произвольного текста, например, как в примере <a href="http://www.SomeSite.com/download">Download</a>. Стандартные решения, основанные на автоматическом обнаружении URL, не подходят для такой задачи.
Подход к Решению
Для решения задачи необходимо выполнить следующие шаги:
Настройка обработчика событий для компонента TRichEdit, чтобы он отправлял сообщение EM_SETEVENTMASK с установкой флага ENM_LINK. Это нужно сделать один раз после создания TRichEdit и повторять при получении сообщения CM_RECREATEWND.
Выделение текста для преобразования в гиперссылку. Можно использовать свойства SelStart и SelLength компонента или отправить сообщение EM_SETSEL или EM_EXSETSEL. Затем необходимо отправить сообщение EM_SETCHARFORMAT с структурой CHARFORMAT2, включающей эффект CFE_LINK для выделенного текста.
Субклассирование обработчика сообщений WindowProc для обработки сообщений CN_NOTIFY(EN_LINK) и CM_RECREATEWND. При получении сообщения EN_LINK можно использовать функцию ShellExecute для открытия указанного URL.
Пример Кода
Для демонстрации можно использовать следующий пример кода на Object Pascal (Delphi):
Создание гиперссылок в TRichEdit, которые начинаются с произвольного текста, не включая протоколы HTTP или www, с использованием WinAPI и субклассирования обработчика сообщений.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.