Einzelnen Beitrag anzeigen

Benutzerbild von Christoph
Christoph

Registriert seit: 23. Jan 2004
Ort: Heidelberg
48 Beiträge
 
Delphi 6 Personal
 
#1

RichEdit Textformatierung

  Alt 25. Mär 2004, 18:27
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 information broker. Modified by Jabba to be an effective bounty hunter.

Wer kann helfen?

Danke und Gruß,
Christoph
'Bist 900 Jahre alt wirst aussehen Du nicht gut!'
  Mit Zitat antworten Zitat