link z SynEdicie

0

co zrobic zeby SynEdit zamienial np www.wp.pl na link. Chodzi mi oto ze jak klikne na ten tekst to mi sie otworzy ta strona.

0
procedure TForm1.FormCreate(Sender: TObject); 
var 
  mask: Word; 
begin 
  mask := SendMessage(Handle, EM_GETEVENTMASK, 0, 0); 
  SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK); 
  SendMessage(RichEdit1.Handle, EM_AUTOURLDETECT, Integer(True), 0); 
end; 

type 
  TForm1 = class(TForm) 
  protected 
    procedure WndProc(var Message: TMessage); override; 
  end; 

procedure TForm1.WndProc(var Message: TMessage); 
var 
  p: TENLink; 
  strURL: string; 
begin 
  if (Message.Msg = WM_NOTIFY) then 
  begin 
    if (PNMHDR(Message.lParam).code = EN_LINK) then 
    begin 
      p := TENLink(Pointer(TWMNotify(Message).NMHdr)^); 
      if (p.Msg = WM_LBUTTONDOWN) then 
      begin 
        SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, Longint(@(p.chrg))); 
        strURL := RichEdit1.SelText; 
        ShellExecute(Handle, 'open', PChar(strURL), 0, 0, SW_SHOWNORMAL); 
      end 
    end 
  end; 

  inherited; 
end; 

yy.. dam to do FAQ moze..

0

[Error] Unit1.pas(33): Undeclared identifier: 'EM_GETEVENTMASK'
[Error] Unit1.pas(34): Undeclared identifier: 'EM_SETEVENTMASK'
[Error] Unit1.pas(34): Undeclared identifier: 'ENM_LINK'
[Error] Unit1.pas(35): Undeclared identifier: 'EM_AUTOURLDETECT'
[Error] Unit1.pas(40): Undeclared identifier: 'TENLink'
[Error] Unit1.pas(45): Undeclared identifier: 'EN_LINK'

0

a czasami w uses o czymś nie zapomniałeś ;) ??

0

No luudzue, chyba trza sie domyśleć :) Do uses dodajemy ShellAPI i RichEdit .. jees :P

0

No właśnie.. wystarczy skorzystać z SynEdit URI HighLighter który robi to automatycznie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1