Lazarus: Link in Memo

20/03/2011 - 17:33 von Heiko Rompel | Report spam
Hallo,

wie erstelle ich in einem Memo-Feld einen anklickbaren Link, der dann
z.B. im Browser oder E-Mail-Programm geöffnet wird?

Gruß HEiko
 

Lesen sie die antworten

#1 Heinrich Wolf
20/03/2011 - 23:21 | Warnen spam
"Heiko Rompel" schrieb im Newsbeitrag
news:
Hallo,

wie erstelle ich in einem Memo-Feld einen anklickbaren Link, der dann z.B.
im Browser oder E-Mail-Programm geöffnet wird?

Gruß HEiko



Hallo,

in einem Memo kann man Text nicht fett oder farblich hervorheben. Der
Anwender wird den Link nicht ohne weiteres als solchen erkennen. Aber wenn
es denn sein soll:

Im OnClick event wertet man die SelStart Property aus und sucht das nàchste
Blank oder Steuerzeichen davor und danach in der Text property. Dann
vergleicht man den Anfang des gefundenen Abschnittes mit 'http://' oder
'mailto:'. Wenn man fündig geworden ist, übergibt man den diesen Abschnitt
bei Linux an einen system call mit xdg-open bzw. xdg-email. Bei Windows
hàtte ich es mit Exec und start versucht, aber das klappt nicht. Ich hab bei
Windows noch keine Lösung.

uses
{$ifdef linux}
Unix,
{$else}
Dos,
{$endif}
Classes,
...

procedure TMainForm.MemoClick(Sender: TObject);
var l, r : Integer;
b : Boolean;
s : String;
begin
l := Memo.SelStart;
r := l;
if l = length(Memo.Text) then
if l > 0 then
dec(l);
repeat
if l = 0 then
b := True
else
if Memo.Text[l] <= ' ' then
b := True
else
begin
dec(l);
b := False;
end;
until b;
if r = length(Memo.Text) then
if r > 0 then
dec(r);
repeat
if r + 1 >= length(Memo.Text) then
b := True
else
if Memo.Text[r + 1] <= ' ' then
b := True
else
begin
inc(r);
b := False;
end;
until b;
s := Copy(Memo.Text, l + 1, r - l);
if copy(s, 1, 7) = 'http://' then
begin
{$ifdef linux}
fpSystem('xdg-open ' + s);
{$else}
Exec('start ' + s, '');
{$endif}
end
else
if Copy(s, 1, 7) = 'mailto:' then
begin
{$ifdef linux}
fpSystem('xdg-email ' + s);
{$else}
Exec('start ' + s, '');
{$endif}
end
end;

Gruß
Heiner

Ähnliche fragen