Einzelnen Beitrag anzeigen

omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: [Richedit]einzelne Wörten hervorheben

  Alt 17. Jan 2008, 08:05
Vielleicht so...

Delphi-Quellcode:
procedure HtmlToRTF(RichEdit:TRichEdit; Html:string);
var RegExpr:TRegExpr;
begin
  RegExpr:=TRegExpr.Create;
  try
    RegExpr.ModifierG:=false;
    RegExpr.Expression:='[b](.*)[/b]';
    RichEdit.SelectAll;
    RichEdit.SelText:=
      '{\rtf1' +
      RegExpr.Replace(Html, '{\\b $1}', true) +
      '}';
  finally
    RegExpr.Free;
  end;
end;
Aufruf...
HtmlToRTF(RichEdit1, '[b]Wichtig:[/b] Ich bin [b]fett[/b] gedruckt.'); Edit: Und hier nochmal eine allgemeinere Lösung:
Delphi-Quellcode:
procedure HtmlToRTF(RichEdit:TRichEdit; Html:string);
type
  TMyResult = record
    HB, HE, R:string;
  end;
const
  cAttribs: array[1..3] of TMyResult = (
    (HB:'[b]'; HE:'[/b]'; R:'\b $1'),
    (HB:'[i]'; HE:'[/i]'; R:'\i $1 '),
    (HB:'<u>'; HE:'</u>'; R:'\ul $1')
  );
var
  RegExpr:TRegExpr;
  i:integer;
  result:string;
begin
  RegExpr:=TRegExpr.Create;
  try
    result:=Html;
    RegExpr.ModifierG:=false;
    for i:=low(cAttribs) to high(cAttribs) do begin
      RegExpr.Expression:=cAttribs[i].HB + '(.*)' + cAttribs[i].HE;
      result:=
        '{\rtf1' +
        RegExpr.Replace(
          result,
          '{' + StringReplace(cAttribs[i].R, '\', '\\', [rfReplaceAll]) + '}',
          true
        ) +
        '}';
    end;
    RichEdit.SelectAll;
    RichEdit.SelText:=result;
  finally
    RegExpr.Free;
  end;
end;
Aufruf...
HtmlToRTF(RichEdit1, 'normal, [b]fett[/b], [i]kursiv[/i], <u>unterstrichen</u>');
RegExpr

Gruss
Thorsten
  Mit Zitat antworten Zitat