AGB  ·  Datenschutz  ·  Impressum  







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

TRichEdit und Link (URL) mit Leerzeichen

Ein Thema von Schwedenbitter · begonnen am 6. Dez 2010 · letzter Beitrag vom 6. Dez 2010
Antwort Antwort
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

TRichEdit und Link (URL) mit Leerzeichen

  Alt 6. Dez 2010, 18:19
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
Alex Winzer

Geändert von mkinzler ( 6. Dez 2010 um 21:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: TRichEdit und Ling (URL) mit Leerzeichen

  Alt 6. Dez 2010, 18:26
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: TRichEdit und Ling (URL) mit Leerzeichen

  Alt 6. Dez 2010, 23:07
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 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.

Gruß, Alex
Angehängte Dateien
Dateityp: zip TRichEditURL_p.zip (1,2 KB, 3x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: TRichEdit und Link (URL) mit Leerzeichen

  Alt 6. Dez 2010, 23:43
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
MyText := StringReplace( MyText, '%' + EnvVarName + '%', EnvVarVal, [ rfReplaceAll, rfIgnoreCase ] ); oder eine Funktion schreiben 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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 00:28 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