Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

УлучшениеRichEdit: обнаружение URL и открытие браузера при щелчке

Delphi , Интернет и Сети , URL

Улучшение RichEdit: обнаружение URL и открытие браузера при щелчке

RichEdit — это компонент Delphi, который позволяет отображать и редактировать форматированный текст. Одной из полезных функций RichEdit является автоматическое обнаружение URL-адресов в тексте. В этой статье мы рассмотрим, как улучшить функциональность RichEdit, чтобы при щелчке на обнаруженном URL-адресе открывался браузер по умолчанию.

Проблема

Разработчик столкнулся с проблемой, при которой URL-адреса обнаруживались в RichEdit, но при щелчке на них ничего не происходило. Он использовал код для обнаружения URL-адресов из документации, но не смог поймать событие щелчка на URL-адресе. Даже переопределение процедуры WndProc не помогло решить проблему.

Решение

Для решения этой проблемы можно использовать подкласс процедуры WindowProc RichEdit и искать сообщение CN_NOTIFY. Вот пример кода, который решает эту проблему:

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    procedure FormCreate(Sender: TObject);
  private
    PrevRichEditWndProc: TWndMethod;
    procedure RichEditWndProc(var Message: TMessage);
    procedure SetRichEditMasks;
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  PrevRichEditWndProc := RichEdit1.WindowProc;
  RichEdit1.WindowProc := RichEditWndProc;
  SetRichEditMasks;
end;

procedure TForm1.SetRichEditMasks;
var
  mask: Longint;
begin
  mask := SendMessage(RichEdit1.Handle, EM_GETEVENTMASK, 0, 0);
  SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK);
  SendMessage(RichEdit1.Handle, EM_AUTOURLDETECT, 1, 0);
end;

procedure TForm1.RichEditWndProc(var Message: TMessage);
begin
  PrevRichEditWndProc(Message);
  case Message.Msg of
    CN_NOTIFY:
      begin
        if (TWMNotify(Message).NMHdr^.code = EN_LINK) then
        begin
          with PENLink(Message.LParam)^ do
          begin
            if (msg = WM_LBUTTONDOWN) then
            begin
              SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LongInt(@chrg));
              ShellExecute(Handle, 'open', PChar(RichEdit1.SelText), 0, 0, SW_SHOWNORMAL);
            end;
          end;
        end;
      end;
    CM_RECREATEWND:
      begin
        SetRichEditMasks;
      end;
  end;
end;

Пример кода выше переопределяет процедуру WindowProc для RichEdit и устанавливает маски событий для автоматического обнаружения URL-адресов. При получении сообщения CN_NOTIFY проверяется, является ли код уведомления EN_LINK. Если да, то проверяется, является ли сообщение WM_LBUTTONDOWN. Если это так, то выделяется текст URL-адреса и открывается браузер по умолчанию с помощью функции ShellExecute.

Заключение

В этой статье мы рассмотрели, как улучшить функциональность RichEdit в Delphi, чтобы при щелчке на обнаруженном URL-адресе открывался браузер по умолчанию. Мы использовали подкласс процедуры WindowProc и искали сообщение CN_NOTIFY, чтобы поймать событие щелчка на URL-адресе. Пример кода, приведенный выше, решает эту проблему и демонстрирует, как можно улучшить

Создано по материалам из источника по ссылке.

Улучшение компонента RichEdit в Delphi для автоматического обнаружения URL-адресов и открытия браузера при щелчке.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: URL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-15 23:53:37/0.0033471584320068/0