{You'll need a TJvxRichEdit and a TButton.}
{Wir benötigen TJvxRichEdit und einen TButton.}
{
The original component doesn't allow everything with URLs. This version add
the possibility of choosing color, put a FTP or MailTo-Link....
Wer die Komponente kennt, weist das es im TJvxRichEdit schon eine Funktion
gibt zum anzeigen URL'S.
Hier hatt der User aber freie wahl und kann die Link Farbe selbst bestimmen.
Und es ist Kinderleicht weitere URL's hinzufügen. Z.b. Mail-Addressen,
FTP-Linksm, ...alles was man will.}
{Wort auf Links prüfen -> Cursor ändern} procedure PruefeWord(RichEdit: TjvxRichEdit; Word1: string); begin
if Length(word1) > 1 then
if word1[1] = ' ' then Delete(word1, 1, 1); //Http:// - LInks if Pos(UpperCase('http://'), UpperCase(Word1)) = 1 then //http:// an der 1 stelle? begin
if (Pos('.', Word1) > 8) then //Ist der . an der stelle 9 oder größer RichEdit.Cursor := crHandPoint; end
else
begin //www. - Links if Pos(UpperCase('www.'), UpperCase(Word1)) = 1 then //www. an der 1 stelle? begin
if LastDelimiter('.', Word1) > Pos('.', Word1) then //Letzter . größer als der 1? RichEdit.Cursor := crHandPoint; end
else RichEdit.Cursor := crDefault; end; end;
{Wort unterm Cursor ermitteln} procedure GetWord(Sender: TObject; X, Y: Integer); var CIndex, LIndex, Offset, i, j: Integer;
Pt: TPoint;
s: string; begin
with TjvxRichEdit(Sender) do
begin Pt := Point(X, Y);
CIndex := Perform(Messages.EM_CHARFROMPOS, 0, Integer(@Pt)); if CIndex < 0 then
begin MWord := '';
Cursor := crDefault;
Exit; end;
LIndex := Perform(EM_EXLINEFROMCHAR, 0, CIndex);
Offset := CIndex - Perform(EM_LINEINDEX, LIndex, 0); if Lines.Count - 1 < LIndex then
begin MWord := '';
Cursor := crDefault;
Exit; end;
s := Lines[LIndex];
i := Offset + 1; while (i > 0) and (s[i] <> ' ') do Dec(i);
j := Offset + 1; while (j <= Length(s)) and (s[j] <> ' ') do Inc(j);
MWord := Copy(s, i, j - i); end;
PruefeWord(TjvxRichEdit(Sender), MWord); end;
{Text ins TRichEdit laden.} procedure LoadContent(Redit: TJvxRichedit; RTFCode: string); var sl: TStringList;
ms: TMemoryStream; begin sl := TStringList.Create; try ms := TMemoryStream.Create; try sl.Text := RTFCode;
sl.SaveToStream(ms);
ms.Seek(0,0); if redit <> nil then redit.Lines.AddObject(rtfcode, ms); finally ms.Free; end; finally sl.Free; end; end;
{Text hinzufügen - Links makieren} function AddContent(RichEdit: TjvxRichEdit; Content: string): string; var Word: string; begin Result := Content; if not (Content[Length(Content)] = ' ') then //keine Leerstelle zum schluss Content := Content + ' '; //Leerstelle hinzufügen - Für letztes Wort. while Pos(' ', Content) <> 0 do //Leerstelle vorhanden? begin Word := Copy(Content, 0, Pos(' ', Content) - 1); //Wort kopieren
//Http:// - Links if Pos(UpperCase('http://'), UpperCase(Word)) = 1 then //http:// an der 1 stelle? begin
if (Pos('.', Word) > 8) then //Ist der . an der stelle 9 oder größer Result := StringReplace(Result, Word, '\cf1\ul ' + Word +'\cf0\ulnone', [rfIgnoreCase]); //Link makieren
{\cf1 = 1 Farbe. \cf0 = Normale Farbe "schwarz". \ul
unterstreicht ein Wort/Satz bis wieder \ulnone aufgerufen worden wurde} end;
//www. - Links if Pos(UpperCase('www.'), UpperCase(Word)) = 1 then //www. an der 1 stelle? if LastDelimiter('.', Word) > Pos('.', Word) then //Letzter . größer als der 1? Result := StringReplace(Result, Word, '\cf1\ul ' + Word +'\cf0\ulnone', [rfIgnoreCase]); //Link makieren
{RTF-Code erstellen} procedure SetRTF; var C: Longint;
r, g, b: Byte; begin {Schrift art die später mit \f0 aufgerufen werden kann.
//Beispiel hinter dem vorletzten -> }
{\f1\fnil\fcharset0 Times New Roman;}
//<- Das dann mit \f1 aufrufen sehe 1 Parameter RTF := '{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}}' +
#13#10 +
'{\colortbl ;';
C := ColorToRGB(clblue); //Farbe umwandeln r := C; //Rot wert auslesen g := C shr 8; //Grün wert b := C shr 16; //Blau Wert RTF := RTF + '\red' + IntToStr(r) + '\green' + IntToStr(g) + '\blue' + IntToStr(b) + ';'; //Farbe hinzufügen RTF := RTF + '}' + '\viewkind4\uc1\pard\f0\fs24'; //Font laden Schriftart und Schriftgröße.
{f0 steht für die Schriftart, die oben angegeben wurde. fs24 (font size) die Schriftgröße} end;
procedure TForm1.FormCreate(Sender: TObject); begin setrtf; end;
procedure TForm1.JvxRichEdit1DblClick(Sender: TObject); begin
if not (mword = '') then
if mword[1] = ' ' then Delete(mword, 1, 1);
ShellExecute(Handle, 'open', PChar(Mword), nil, nil, SW_SHOWNORMAL); end;