Ich versuche RichEdit zu aktualisieren, so dass es URL erkennt und ermöglicht das Klicken auf es im Browser zu öffnen. Erkennen URL ist einfach, ich nutze einfach den folgenden Code aus http://www.scalabium.com/faq/dct0146.htmDetect Klick auf URL in RichEdit
mask := SendMessage(MNote.Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(MNote.Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK);
SendMessage(MNote.Handle, EM_AUTOURLDETECT, Integer(True), 0);
aber der zweite Teil für mich nicht funktioniert. Sie geben den folgenden Code EN_LINK Nachricht zu erfassen und zu verarbeiten es:
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;
Wenn ich das Programm ausführen, URL erkannt wird, aber darauf klicken nicht alles tun. Beim Debugging habe ich festgestellt, dass Message.Msg = WM_NOTIFY nicht wahr ist, wenn ich auf URL klicke. Ich habe dann versucht, TRichEdit WndProc zu überschreiben, aber das Ergebnis ist das gleiche. Irgendwelche Vorschläge?
Siehe auch [So implementieren Sie den Mausklick für URLs bei Rich-Edit-Steuerelement] (http://stackoverflow.com/q/11398248/850848). –
Es funktioniert für mich. – Ampere