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: 11028 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: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- protected // precisamos sobrescrever a procedure WndProc procedure WndProc(var Message: TMessage); override; b) Faça a implementação da procedure WndProc(var Message: TMessage): ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
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: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- 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: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
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 |
|
QGIS - Como retornar o título do projeto do QGIS usando PyQGIS e a função title() da classe QgsProject |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






