Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
+55 (062) 98553-6711
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO
+55 (062) 98243-1195

Você está aqui: Delphi ::: VCL - Visual Component Library ::: TRichEdit

Como destacar URLs em um TRichEdit e abrí-las no browser quando clicadas

Quantidade de visualizações: 10889 vezes
Em algumas situações gostaríamos de destacar as URLs no texto de um TRichEdit e, quando o usuário clicar nas URLs, abrí-las no navegador. Nesta dica eu mostro como isso pode ser feito:

O primeiro passo é colocar um TRichEdit no seu formulário. Em seguida siga atentamente os passos abaixo:

a) Adicione uma declaração de procedure que sobrescreve WndProc() na seção protected do formulário. Isso é necessário para que possamos ter acesso à mensagem WM_NOTIFY da API do Windows:

----------------------------------------------------------------------
Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar)

Este código foi útil? Paga um cafezinho pra mim :-(
PIX: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

protected
  // precisamos sobrescrever a procedure WndProc
  procedure WndProc(var Message: TMessage); override;

b) Faça a implementação da procedure WndProc(var Message: TMessage):

----------------------------------------------------------------------
Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar)

Este código foi útil? Paga um cafezinho pra mim :-(
PIX: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm1.WndProc(var Message: TMessage);
var
  p: TENLink; // contém informação sobre a mensagem de notificação EN_LINK
  strURL: string; // guardará a URL a ser aberta no navegador
begin
  // a mensagem é WM_NOTIFY?
  if (Message.Msg = WM_NOTIFY) then
  begin
    // o código da mensagem de notificação é EN_LINK?
    if (PNMHDR(Message.lParam).code = EN_LINK) then
    begin
      // vamos preencher a estrutura TENLink
      p := TENLink(Pointer(TWMNotify(Message).NMHdr)^);
      // o usuário pressionou o botão esquerdo?
      if (p.Msg = WM_LBUTTONDOWN) then
      begin
        // vamos selecionar o texto contendo o link
        SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, Longint(@(p.chrg)));
        // vamos obter o texto selecionado (que contém o link)
        strURL := RichEdit1.SelText;
        // finalmente vamos abrir o endereço contido no link no navegador
        ShellExecute(Handle, 'open', PChar(strURL), 0, 0, SW_SHOWNORMAL);
      end
    end
  end;

  inherited;
end;

c) Finalmente coloque o código abaixo no evento Create do formulário:

----------------------------------------------------------------------
Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar)

Este código foi útil? Paga um cafezinho pra mim :-(
PIX: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm1.FormCreate(Sender: TObject);
var
  mascara: Word;
begin
  // não esqueça de adicionar Richedit e ShellAPI no uses
  mascara := SendMessage(Handle, EM_GETEVENTMASK, 0, 0);
  SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, mascara or ENM_LINK);
  // vamos fazer com que o RichEdit detect URLs e aplique a formatação de links
  SendMessage(RichEdit1.Handle, EM_AUTOURLDETECT, Integer(True), 0);
end;

Para que você aproveite bem a dica, segue o código completo para a unit:

----------------------------------------------------------------------
Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar)

Este código foi útil? Paga um cafezinho pra mim :-(
PIX: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Richedit, ShellAPI, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  protected
    // precisamos sobrescrever a procedure WndProc
    procedure WndProc(var Message: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  mascara: Word;
begin
  // não esqueça de adicionar Richedit e ShellAPI no uses
  mascara := SendMessage(Handle, EM_GETEVENTMASK, 0, 0);
  SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, mascara or ENM_LINK);
  // vamos fazer com que o RichEdit detect URLs e aplique a formatação de links
  SendMessage(RichEdit1.Handle, EM_AUTOURLDETECT, Integer(True), 0);
end;

procedure TForm1.WndProc(var Message: TMessage);
var
  p: TENLink; // contém informação sobre a mensagem de notificação EN_LINK
  strURL: string; // guardará a URL a ser aberta no navegador
begin
  // a mensagem é WM_NOTIFY?
  if (Message.Msg = WM_NOTIFY) then
  begin
    // o código da mensagem de notificação é EN_LINK?
    if (PNMHDR(Message.lParam).code = EN_LINK) then
    begin
      // vamos preencher a estrutura TENLink
      p := TENLink(Pointer(TWMNotify(Message).NMHdr)^);
      // o usuário pressionou o botão esquerdo?
      if (p.Msg = WM_LBUTTONDOWN) then
      begin
        // vamos selecionar o texto contendo o link
        SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, Longint(@(p.chrg)));
        // vamos obter o texto selecionado (que contém o link)
        strURL := RichEdit1.SelText;
        // finalmente vamos abrir o endereço contido no link no navegador
        ShellExecute(Handle, 'open', PChar(strURL), 0, 0, SW_SHOWNORMAL);
      end
    end
  end;

  inherited;
end;

end.


Link para compartilhar na Internet ou com seus amigos:

Desafios, Exercícios e Algoritmos Resolvidos de Delphi

Veja mais Dicas e truques de Delphi

Dicas e truques de outras linguagens

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 30 usuários muito felizes estudando em nosso site.