Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Richedit kann URL's nicht mehr erkennen - wie doch wieder? (https://www.delphipraxis.net/188456-richedit-kann-urls-nicht-mehr-erkennen-wie-doch-wieder.html)

MessOldie 5. Mär 2016 11:28

Richedit kann URL's nicht mehr erkennen - wie doch wieder?
 
Hallo,
ich benutze ein RichEdit für die Anzeige von programmintern gehaltenen Hilfe-Texten.
Wenn ich mit
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  with RichEdit1 do
  begin
    mask := SendMessage(Handle, EM_GETEVENTMASK, 0, 0);
    SendMessage(Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK);
    SendMessage(Handle, EM_AUTOURLDETECT, Longint(True), 0);
  end;
end;
das RichEdit für URL'S sensibilisiere, wie hier schon gepostet, dann funktioniert das schon nicht mehr, wenn ich Wordwrap (zur Laufzeit danach) toggle.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  with RichEdit1 do
  begin
    mask := SendMessage(Handle, EM_GETEVENTMASK, 0, 0);
    SendMessage(Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK);
    SendMessage(Handle, EM_AUTOURLDETECT, Longint(True), 0);
    {hier Laden eines Richedit-Texts, z. B. aus Ressource}
    WordWrap := not WordWrap;
    {und schon gehen die Links nicht mehr, auch die Farbe wird ein anderes Blau}
  end;
end;
Kennt jemand eine Gegenmaßnahme?

himitsu 5. Mär 2016 20:15

AW: Richedit kann URL's nicht mehr erkennen - wie doch wieder?
 
Da TRUE für diesen Parameter einfach falsch ist, würde ich mich nicht wundern, wenn es nicht funktioniert. :roll:
https://msdn.microsoft.com/de-de/lib.../bb787991.aspx

Und wenn das Ändern von WordWrap an den Settings des RichEdit rumspielt, dann könnte es auch passieren, dass deine Einstellungen verloren gehen, denn das Ändern von WordWrap löst ein CM_RECREATEWND aus, welches das WinControl löscht und es komplett neu erstellt, natürlich ohne deine vorherigen Änderungen daran. :stupid:

MessOldie 6. Mär 2016 11:57

AW: Richedit kann URL's nicht mehr erkennen - wie doch wieder?
 
Danke, himitsu, für Deine Antwort.:)
Hier verstehe ich nicht ganz:
Zitat:

Zitat von himitsu (Beitrag 1332189)
Da TRUE für diesen Parameter einfach falsch ist, würde ich mich nicht wundern, wenn es nicht funktioniert.

Unter Delphi5-Professional | Delphi6-Personal (mehr habe ich als "Amateur" nicht) ist WordWrap eine ganz normale property, so wie WantReturns und WantTabs.
Wahrscheinlich hast Du aber trotzdem recht, dass man die zur Laufzeit nicht ändern sollte...
Ich werde als "Lösung" WordWrap zur Entwurfszeit auf True stellen und seine Umschaltung dem User einfach nicht mehr zur Verfügung stellen.

Luckie 6. Mär 2016 12:09

AW: Richedit kann URL's nicht mehr erkennen - wie doch wieder?
 
Er meint die Nachricht EM_AUTOURLDETECT und deren zweiten Parameter. (Er hat doch extra einen Link gepostet.) Wie kommst du darauf, dass da ein nach LongInt gecaster True Boolenwert übergeben werden muss? Da kommt irgendeine Ganzzahl raus.

Zitat:

lParam

This parameter determines the URL schemes recognized if AURL_ENABLEURL is active. If lParam is NULL, the default scheme name list is used (see Remarks). Alternatively, lParam can point to a null-terminated string consisting of up to 50 colon-terminated scheme names that supersede the default scheme name list. For example, the string could be "news:http:ftp:telnet:". The scheme name syntax is defined in the Uniform Resource Identifiers (URI): Generic Syntax document on The Internet Engineering Task Force (IETF) website. Specifically, a scheme name can contain up to 13 characters (including the colon), must start with an ASCII alphabetic, and can be followed by a mixture of ASCII alphabetics, digits, and the three punctuation characters: ".", "+", and "-". The string type can be either char* or WCHAR*; the rich edit control automatically detects the type.

himitsu 7. Mär 2016 10:07

AW: Richedit kann URL's nicht mehr erkennen - wie doch wieder?
 
Bei sowas am Besten die Komponente ableiten und CreateWnd oder CreateWindowHandle überschreiben und dort die Einstellungen wieder herstellen einstellen, wenn das interne Windows-Control (neu) erstellt wird.

MessOldie 7. Mär 2016 11:15

AW: Richedit kann URL's nicht mehr erkennen - wie doch wieder?
 
@Luckie:
Ich bin nicht drauf gekommen; ich war faul und habe nur kopiert...

Ich habe diese drei Zeilen an mindestens 2 Stellen hier im Forum genauso gefunden, u. a. da:
www.delphipraxis.net/186798-richedit-mit-eigenen-urls
Vermutlich stammen alle von den Schweizern:
http://www.swissdelphicenter.ch/de/showcode.php?id=1505
http://www.swissdelphicenter.ch/de/showcode.php?id=1652
Der Gedankengang des Urschreibers war meiner Ansicht nach so:
1. Mit #define AURL_ENABLEURL 1 bedeutet
  • AURL_ENABLEURL = "Einschalten" und
  • 0 = "Auschalten".
2. Dann ist das eine Ja-Nein-Entscheidung und True-False verdeutlicht das Pascal-mäßig recht gut.
3. Also schreibe ich "Integer(True)", wenn ich einschalten will.

Weil ich wirklich gerne noch was hinzulerne (s. u., nur mit dem Hängebleiben hapert's oft), habe ich die Zeile umgeschrieben:
Delphi-Quellcode:
SendMessage(Handle, EM_AUTOURLDETECT, AURL_ENABLEURL, 0);
,
und weiter oben eingefügt
Delphi-Quellcode:
const AURL_ENABLEURL = 1;
Wie zu erwarten war, hat sich am Verhalten nichts geändert.

@himitsu:
Zitat:

Zitat von himitsu (Beitrag 1332272)
Bei sowas am Besten die Komponente ableiten und CreateWnd oder CreateWindowHandle überschreiben und dort die Einstellungen wieder herstellen einstellen, wenn das interne Windows-Control (neu) erstellt wird.

Natürlich hast Du auch hier wieder recht, aber wenn ich (fast) das gleiche Ergebnis mit weniger Aufwand erreiche, dann kommt meine Faulheit wieder durch...

Ich bleibe dabei: Der Nutzer darf einfach WordWrap nicht mehr toggeln und ich habe meine Ruhe...

Aber danke an Euch alle, dass ihr mir einen Teil Eurer Zeit gewidmet habt (und das ist nicht ironisch gemeint)!

MessOldie 15. Apr 2017 20:12

AW: Richedit kann URL's nicht mehr erkennen - wie doch wieder?
 
Man kann wirklich immer noch dazulernen :-D:-D:-D (siehe unten) und ich freu' mich drüber ...
Es hat mich immer wieder mal gewurmt, die An- bzw- Abschaltung der Wordwrap-Funktion wegen der URL-Fähigkeit meinen Programmnutzern nicht mehr zur Verfügung stellen zu können.
Deshalb habe ich nochmal das WWW mit allen möglichen Fragestellungen abgesucht - und trara - hiermit ist es möglich (damit ihr nicht solange suchen müsst wie ich) und die URL-Links bleiben dabei aktiv:
Delphi-Quellcode:
MyRichEdit: TRichEdit;
MyWordWrap: TAction;

 ...

SendMessage(MyRichEd.Handle, EM_SETTARGETDEVICE, 0, Ord(not MyWordWrap.Checked))
Einschränkung: Ich habe es nur mit Delphi5|6 testen können; mehr kann ich mir bei meiner "brotlosen Kunst" leider nicht leisten.

Schöne Ostern Euch allen...

himitsu 15. Apr 2017 20:15

AW: Richedit kann URL's nicht mehr erkennen - wie doch wieder?
 
Einziges Problemchen, was es mit neueren Delphis geben könnte.
Vor ein paar Jahren wurde in Delphi auf eine aktuellere Version des RichEdit umgestellt, womit sich einiges an der API/Komponente im Windows ändert.


brotlos: https://www.embarcadero.com/de/products/delphi/starter

MessOldie 15. Apr 2017 20:20

AW: Richedit kann URL's nicht mehr erkennen - wie doch wieder?
 
@himitsu:
Recht hast Du, wie wohl fast immer - aber genau deshalb steht die Bemerkung ja drunter!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 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