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/)
-   -   TRichEdit und Link (URL) mit Leerzeichen (https://www.delphipraxis.net/156547-trichedit-und-link-url-mit-leerzeichen.html)

Schwedenbitter 6. Dez 2010 18:19


TRichEdit und Link (URL) mit Leerzeichen
 
Hallo,

ich habe TRichEdit um das Hervorheben von URLs und Mailadressen erweitert. Das klappt ganz gut und ich habe dabei festgestellt, dass man auch Dateien und Programme öffnen kann, wenn sie z.B. auf einer Freigabe liegen und ich sie in der Form
Code:
\\Rechner\Freigabe\Verzeichnis\Datei
anspreche.

Leider habe ich nicht herausfinden können, wie das mit Dateien geht, die auf meinem eigenen Rechner ohne Freigabe liegen. Wenn ich also jemandem einen Link zu z.B.
Code:
%SystemRoot%\system32\calc.exe
schicken möchte.
Zudem wüsste ich gern, ob man irgendwie Leerzeichen handeln kann. So klappt z.B.
Code:
\\Rechner\Freigabe\langes Verzeichnis\Datei
nicht, weil nach dem Wort langes der Link nicht mehr markiert wird und ich bei einem Klick den Rest nicht mitgeliefert bekomme.

Gibt es da Möglichkeiten

Gruß, Alex

s.h.a.r.k 6. Dez 2010 18:26

AW: TRichEdit und Ling (URL) mit Leerzeichen
 
Das Problem mit den Leerzeichen musst du via Anführungszeichen (oder einem anderen Zeichenpaar lösen). Die Eingabeaufforderung von Windows macht ja auch automatisch welche wenn du Tab drückst, bzw. benötigt eben welche. Sonst kann man sowas nicht sinnvoll parsen.

Und sowas hier %SystemRoot%\system32\calc.exe wird immer etwas problematisch sein, da %SystemRoot% ja eine Umgebungsvariable ist. Auslesen lässt sich das sicherlich irgendwie. Musst es halt dann passend einbauen.

Schwedenbitter 6. Dez 2010 23:07

AW: TRichEdit und Ling (URL) mit Leerzeichen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke erst einmal für die Antwort.

Naja %SystemRoot% war nur ein (möglicherweise wenig durchdachtes) Beispiel. Aber C:\WINDOWS\system32\calc.exe funktioniert eben auch nicht. Es werden nur freigabebasierte Links ohne Leerzeichen erkannt. Das Ersetzen (noch von Hand) des Leerzeichens durch %20 wie im Browser bringt auch nichts.

Im Moment löse ich das rein über Messages. Ich habe mal die Unit angefügt, damit niemand den Quellcode von meinem Link abtippen, kopieren oder sonstwas muss. In Bezug darauf würde das bedeuten, dass ich entweder
  • das Parsen von Hand machen muss oder
  • der Komponente über mir unbekannte Messages mitteilen muss, dass sie mir alles zwischen den "" zurückgibt.
Beides überfordert mich zugegebener Maßen im Moment. Bei der von mir angewandten Lösung brauche ich mich um nichts zu kümmern. Beim Parsen von Hand z.B. muss ich dann bei jeder Änderung von
Delphi-Quellcode:
TRichEdit.Lines
den gesamten Text durchsuchen und (keine Ahnung wie das geht), gefundene Links markieren...

Ich hatte auf eine einfachere Lösung gehofft, die jemand der schlauer ist als ich, kennt.:lol:

Gruß, Alex

Sir Rufo 6. Dez 2010 23:43

AW: TRichEdit und Link (URL) mit Leerzeichen
 
Ein Link zu einer Datei ist ja eigentlich so aufgebaut:
Code:
file://C:\Windows\System32\calc.exe
das sollte eigentlich funktionieren
Und bei einer Freigabe mit Leerzeichen so
Code:
file://Rechner/Freigabe/Langes%20Verzeichnis/Datei
So müsstest du diese Links schon vorbereitet übergeben, denn ein Leerzeichen ist nun mal schwer zu interpretieren, weil nicht eindeutig.

%SystemRoot% ist eigentlich auch kein Problem, da man hier die Environment-Variablen benutzen möchte.
Also entweder alle Environment-Variablen im Text ersetzen lassen
Delphi-Quellcode:
MyText := StringReplace( MyText, '%' + EnvVarName + '%', EnvVarVal, [ rfReplaceAll, rfIgnoreCase ] );
oder eine Funktion schreiben
Delphi-Quellcode:
EnvVarName := StringBetween( MyText, '%', '%' );
und dann mit StringReplace im Text ersetzen.
Variante1 ist aber wesentlich einfacher und weniger fehlerbehaftet umzusetzen (dafür aber mehr Rechenaufwand).

Man könnte diesen Teil aber auch in die Routine auslagern, die den Link aufruft und dann nur dort beim Aufruf ersetzen lassen, denn sonst werden ja auch evtl. Teile ersetzt, die gar nicht ersetzt werden sollen.


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