AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RichEdit mit eigenen Urls

Ein Thema von Thomas Feichtner · begonnen am 30. Sep 2015 · letzter Beitrag vom 5. Okt 2015
Antwort Antwort
Thomas Feichtner

Registriert seit: 30. Nov 2007
Ort: Rum
137 Beiträge
 
Delphi 10.4 Sydney
 
#1

RichEdit mit eigenen Urls

  Alt 30. Sep 2015, 17:14
Hallo,

ich möchte gerne im RichEdit noch Wörter als URL definieren.

Derzeit geht ja http://..., mailto...., usw

Wie kann ich nun das Richedit dazu bringen auch bei dem Wort mgmdoc:// ein Hyperlink daraus zu machen und das entsprechend beim OnClick aufgerufen wird.

Delphi-Quellcode:
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:='TEST' + #13#10 +
     'http://www.delphi.abc.com.' + #13#10 +
     'Send an email to your Guide: mailto:delphi@abc.com';
  RichEdit1.Text := s;
end;
und
Delphi-Quellcode:
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 *)
mfg

Thomas Feichtner
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: RichEdit mit eigenen Urls

  Alt 1. Okt 2015, 01:51
Die Tatsache, daß die URLs ja irgendwo anders gespeichert werden müssen, wenn sie nicht mehr im Klartext in der Stringliste Lines auftauchen dürfen, wirft die Frage nach dem Wo auf. Die Antwort lautet daher: Du mußt dir eine eigene RichEdit-Komponente ableiten und diese um die gewünschte Funktion ergänzen.

Die Frage nach dem Wie erfordert allerdings komplexere Überlegungen. Führst du ein weiteres Steuerzeichen ein, um Beginn und Ende einer URL zu kennzeichnen, machst du dir's einfach. Du nummerierst die URLs durch und verweist mit diesm Index auf einen internen Record, der die URLs enthält. Dazu mußt du dann aber auch mindestens eine InputBox spendieren, damit der Anwender die URL dort eingeben kann. Zusätzlich wäre wie in Word oder in HTML-Browsern ein Hint sinnvoll, der die verborgene URL anzeigt. So oder ähnlich würde ich die Sache anzupacken versuchen.

Die Sache mit dem zusätzlichen Steuerzeichen hat nur einen Haken: Die damit bearbeiteten Texte sind nicht mehr kompatibel mit der RTF-Spezifikation und werden wohl beim Versuch, sie in normale Richedits einzulesen, Fehler oder Fehldarstellungen erzeugen. Damit wären wir bei der zweiten Möglichkeit: ein dynamisches RichEdit, das selbst ständig kontrolliert, ob im angezeigten Bereich eine Zeichenfolge existiert, die als URL gekennzeichnet wurde. Das ist zwar komplexer, kommt aber letztendlich ohne weiteres Steuerzeichen aus und bleibt somit kompatibel. Der URL-Record, der bei der Wahl dieser Möglichkeit verwaltet werden muß, benötigt Beginn- und Endwerte, um die als URL gekennzeichnete Zeichenfolge ermitteln zu können. Beim Einfügen von weiterem Text vor diesen URL-Strings muß immer gleich angepaßt werden, also im Prinzip bei jedem Tastendruck, er ein Zeichen einfügt oder löscht.
  Mit Zitat antworten Zitat
Thomas Feichtner

Registriert seit: 30. Nov 2007
Ort: Rum
137 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: RichEdit mit eigenen Urls

  Alt 5. Okt 2015, 09:58
Hallo,

vielleicht habe ich mich hier falsch ausgedrückt.
Was will ich?
Ein Memo bzw. DBMemo das auch Hyperlinks darstellen kann und eben auch selbst definierte Links.

Ich brauche keine Formatierung.
mfg

Thomas Feichtner
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: RichEdit mit eigenen Urls

  Alt 5. Okt 2015, 10:55
Hallo,

vielleicht habe ich mich hier falsch ausgedrückt.
Was will ich?
Ein Memo bzw. DBMemo das auch Hyperlinks darstellen kann und eben auch selbst definierte Links.

Ich brauche keine Formatierung.
Für die Darstellung benötigst Du Formatierung.
Des weiteren brauchst Du eine Definition "was ist ein link im Text" und ggf. die Definition einer Aktion wenn ein "Link" angeklickt wird.

Ein TRichedit/TMemo ist zunächst einmal für die Darstellung und Bearbeitung von Text zuständig, was Du möchtest geht doch etwas darüber hinaus.
U.U. könnte Dir Synedit da weiter helfen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: RichEdit mit eigenen Urls

  Alt 5. Okt 2015, 19:44
Was will ich? Ein Memo bzw. DBMemo das auch Hyperlinks darstellen kann und eben auch selbst definierte Links.
Oben wolltest du noch eine RTF-Komponente, die URLs darstellen kann, ohne die URL in die komponenteneigene Stringliste aufzunehmen. Aber natürlich kann man seine Meinung auch ändern ...

Ich brauche keine Formatierung.
Wie p80286 bereits ausführte, geht die Darstellung von "mehr als nur Text" nicht mit einem Memo, denn dieses kann wirklich nur eines: Text in einer einzigen Schriftformatierung – z.B. Arial 10 Punkt, linksbündig, kursiv, schwarz – darstellen. Willst du davon abweichende Textstellen kennzeichnen, genügen TMemo und TDBMemo nicht. Daher benötigste du – wie du in deinem Eingangsposting bereits festgestellt hast – ein TRichEdit, und zwar wegen der Formatierung. Die Kennzeichnung eines Textteiles als URL ist eine Formatierung, denn sie betrifft nicht den Text, sondern eine Texteigenschaft, also ein Property.

Soweit alles klar?

Wie ich oben bereits ausführlich dargestellt habe, mußt du dir überlegen, wo die URL gespeichert werden soll. Die beiden Möglichkeiten, die mir dazu einfielen, habe ich dir bereits aufgezeigt. Programmieren mußt du das natürlich selber – außer du erteilst jemandem einen Auftrag (z.B. mir gegen Vorkasse) oder erwirbst eine der kommerziellen Komponenten (was ich an deiner Stelle vorziehen würde).
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#6

AW: RichEdit mit eigenen Urls

  Alt 5. Okt 2015, 20:32
Mal 'ne dumme Frage: Was ist das eigentlich "mgmdoc://"?

Was nützt Dir ein Link, der so beginnt - man braucht auch einen Browser, der damit was anfangen kann.

Eigene URLs kann man in der Registry eintragen:
Code:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\URL\Prefixes]
"mosaic"="http://"
"www"="http://"
"home"="http://"
"ftp"="ftp://"

Geändert von hathor ( 5. Okt 2015 um 21:01 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 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