Hallo!
Ich habe ein interessantes Problem, für das ich noch eine Lösung suche.
Ich möchte einen String in einem RichEdit-Element darstellen.
Innerhalb dieses Strings möchte ich bestimmte Worte fett markieren.
Die zu markierenden Worte sind im String mit geschweiften Klammern [Bsp.: '{Wortfett}'] markiert.
Ich habe ein Lösung, mit der ich das Wort inklusive der geschweiften Klammern fett markiert darstellen kann.
Allerdings sollen die fett markierten Worte *ohne* Klammern angezeigt werden.
Im String kommen öfters auch mehrere Worte vor, die markiert werden sollen.
Insgesamt gibt es 30 verschiedene Worte, die - sofern sie im String vorkommen - fett markiert werden sollen.
Bsp. für einen String mit mehreren zu markierenden Worten:
'Accomplished {thief} and {information broker}. Modified by Jabba to be an effective {bounty hunter}.'
Ich habe die 30 Worte in ein array [KeyWords] eingelesen und lasse alle Strings [TextString] auf die dort enthaltenen Worte abprüfen
[Hier mal eine Version zum Copy&Paste mit 3 Worten:]
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, StrUtils;
procedure TForm1.Button1Click(Sender: TObject);
var
a: integer;
FettAnfang, FettEnde: integer;
KeyWords: array[0..2] of string;
TextString: string;
begin
KeyWords[0]:='{information broker}';
KeyWords[1]:='{bounty hunter}';
KeyWords[2]:='{thief}';
TextString:='Accomplished {thief} and {information broker}. Modified by Jabba to be an effective {bounty hunter}.';
RichEdit1.Text:=TextString;
a:=0;
while a < High(KeyWords)+1 do
begin
if AnsiContainsText(TextString, KeyWords[a]) then
begin
FettAnfang:=Pos(KeyWords[a], TextString)-1;
FettEnde:=FettAnfang+(Length(KeyWords[a])+1);
RichEdit1.SelStart:=FettAnfang;
RichEdit1.SelLength:=(FettEnde-1)-FettAnfang;
RichEdit1.SelAttributes.Style:=[fsBold];
end;
inc(a);
end;
end;
end.
Das Ergebnis sieht so aus:
Accomplished
{thief} and
{information broker}. Modified by Jabba to be an effective
{bounty hunter}.
Ich würde es aber gerne so hinbekommen:
Accomplished
thief and
information broker. Modified by Jabba to be an effective
bounty hunter.
Wenn ich aber mit einer Funktion (z.B. mit AnsiReplaceStr) aus dem Textstring die '{}' herauslösche, denn wird der String kürzer und die Fett-Formatierung stimmt dann nicht mehr.
Bsp.:
Mit dieser Funktion angewendet auf RichEdit1.Text
Delphi-Quellcode:
function ConvertKlammern(s: string): string;
begin
s:=AnsiReplaceStr(s, '{', '');
s:=AnsiReplaceStr(s, '}', '');
result:=s;
end;
kommt das hier heraus:
Accomplished
thief and in
formation broker. Modified by Jabba to be an effective boun
ty hunter.
Wer kann helfen?
Danke und Gruß,
Christoph