Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi EMail-Adressen und URL's in Memo oder Richedit hervorheben (https://www.delphipraxis.net/93054-email-adressen-und-urls-memo-oder-richedit-hervorheben.html)

Steven2 30. Mai 2007 23:26


EMail-Adressen und URL's in Memo oder Richedit hervorheben
 
Hallo...
ich möchte in einem Memo oder Richedit Text eingeben.
Wenn Emailadressen oder URL's eingegeben werden, so müssen diese "automatisch" verlinkt werden.
Mit dem Code klappt das schon ganz gut, nur will ich nicht immer ein mailto: vor die Mailadresse eingeben, damit diese als solche erkannt wird.

Gruß
Steven



Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    RichEdit2: TRichEdit;
    procedure FormCreate(Sender: TObject);
  private
    procedure InitRichEditURLDetection(RE : TRichEdit);
  public
    { Public declarations }
  protected
    procedure WndProc(var Msg: TMessage); override;
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

uses ShellApi, RichEdit;

procedure TForm1.InitRichEditURLDetection(RE: TRichEdit);
var
  mask: Word;
begin
  mask := SendMessage(RE.Handle, EM_GETEVENTMASK, 0, 0);
  SendMessage(RE.Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK);
  SendMessage(RE.Handle, EM_AUTOURLDETECT, Integer(True), 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  s: string;
begin
  InitRichEditURLDetection(RichEdit1);

  s:='Great Delphi tutorials and articles at ' +
     'http://www.delphi.about.com.' + #13#10 +
     'About Delphi Programming site!' + #13#10 +
     'Send an email to your Guide: mailto:delphi.guide@about.com';
  RichEdit1.Text := s;

  s:= 'http://www.delphi.about.com. ' +
      ' This Rich Edit does not recognize URLs!';
  RichEdit2.Text := s
end;

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

 inherited;
end; (* TForm1.WndProc *)

end. (* unit1.pas *)


{
********************************************
Zarko Gajic
About.com Guide to Delphi Programming
[url]http://delphi.about.com[/url]
email: [email]delphi.guide@about.com[/email]
free newsletter: [url]http://delphi.about.com/library/blnewsletter.htm[/url]
forum: [url]http://forums.about.com/ab-delphi/start/[/url]
********************************************
}

Mackhack 31. Mai 2007 04:47

Re: EMail-Adressen und URL's in Memo oder Richedit hervorhe
 
Hi,

vielleicht hilft das weiter:

Validieren einer eMail Adresse

Steven2 31. Mai 2007 07:38

Re: EMail-Adressen und URL's in Memo oder Richedit hervorhe
 
Hallo Mackhack,
danke für deine Hilfe, hatte die Idee leider aber auch schon.
Mein Problenm ist dann diesen Link aktiv zu bekommen, also anklickbar usw. zu machen.
Leider verstehe ich meinen Bespielsource nicht komplett um ihn so anzupassen wie ich ihn brauche.
Mbg
Steven

marabu 31. Mai 2007 09:19

Re: EMail-Adressen und URL's in Memo oder Richedit hervorhe
 
Hallo Steven,

wenn du das scheme prefix "mailto:" nicht erfasst, dann kannst du die automatische URL-Erkennung nicht mehr verwenden. Der Aufruf von InitRichEditURLDetection() muss dann unterbleiben und du musst einen eigenen Parser einsetzen, der beim Laden des Textes und bei jeder Änderung die Mail-Adressen lokalisiert und per Message WM_SETCHARFORMAT den Zeichen-Effekt CFE_LINK (CHARFORMAT2) setzt - genau das macht die Auto URL Detection auch, nur dass der dortige Parser wegen des vorhandenen Schlüsselwortes viel einfacher (performanter) zu implementieren ist.

Grüße vom marabu

semo 31. Mai 2007 14:02

Re: EMail-Adressen und URL's in Memo oder Richedit hervorhe
 
nur so ein kleiner einwurf von mir:
unter der folgenden url findest du einen richvieweditor der das verlinken von emails und urls von haus aus mitbringt: http://www.trichview.com/.

schau dir doch den mal in ruhe an?!

Steven2 1. Jun 2007 00:00

Re: EMail-Adressen und URL's in Memo oder Richedit hervorhe
 
Zitat:

Zitat von marabu
...du musst einen eigenen Parser einsetzen, der beim Laden des Textes und bei jeder Änderung die Mail-Adressen lokalisiert und per Message WM_SETCHARFORMAT den Zeichen-Effekt CFE_LINK (CHARFORMAT2) setzt - genau das macht die Auto URL Detection auch, nur dass der dortige Parser wegen des vorhandenen Schlüsselwortes viel einfacher (performanter) zu implementieren ist.

Grüße vom marabu

Einen eigenen Parser einsetzen klingt sehr kompliziert, hast du evt. ein Beipiel wie ich sowas angehen muss?

Grüße
Steven

Steven2 1. Jun 2007 00:01

Re: EMail-Adressen und URL's in Memo oder Richedit hervorhe
 
Zitat:

Zitat von computer-glossar.de
nur so ein kleiner einwurf von mir:
unter der folgenden url findest du einen richvieweditor der das verlinken von emails und urls von haus aus mitbringt: http://www.trichview.com/.

schau dir doch den mal in ruhe an?!

Hallo Marcus,
danke, guck mir den auf jeden Fall an.
Grüße
Steven


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz