Você está aqui: Delphi ::: VCL - Visual Component Library ::: TRichEdit |
Como destacar URLs em um TRichEdit e abrí-las no browser quando clicadasQuantidade 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. |
![]() |
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 |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |