Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi RichEdit: <i>..</i> kursiv setzen (https://www.delphipraxis.net/129608-richedit-i-i-kursiv-setzen.html)

BackOrifice 22. Feb 2009 04:05


RichEdit: <i>..</i> kursiv setzen
 
Nabend,

ich versuche seit geraumer Zeit, einen gewissen Text in einem TRichEdit-Feld zu manipulieren, aber irgendwie krieg ich's einfach nicht gerafft; auch mit Googlen :gruebel:

Ich möchte alle in "" und "" eingeschlossenen Textpassagen kursiv darstellen. Quasi: Normaler Text. [.i]kursiver Text.[./i] Normaler Text. Nur eben die [] durch <> ersetzt. Für einmal krieg ich das ganze hin - aber bei > 1 Vorkommen überschreibe ich mir meine SelStart, SelLengths.

Delphi-Quellcode:
  with RichEdit do
  begin
    while POS('[i]',Lines.Text) <> 0 do
    begin
      StartTag := POS('[i]',Lines.Text);
      if StartTag <> 0  then
      begin
        EndTag := POS('[/i]',Lines.Text) - POS('[i]',Lines.Text);
        Lines.Text := StringReplace(Lines.Text,'[i]','',[rfIgnoreCase]);
        Lines.Text := StringReplace(Lines.Text,'[/i]','',[rfIgnoreCase]);
        SelStart := StartTag;
        SelLength := EndTag - 3;
        SelAttributes.Style := [fsItalic];
      end;
    end;
  end;
Was für einen Aufruf brauche ich, damit ich beliebige oft Passagen markieren kann? :gruebel:

Ich danke euch.

omata 22. Feb 2009 05:18

Re: RichEdit: <i>..</i> kursiv setzen
 
Delphi-Quellcode:
procedure HTMLtoRTF(html:string; RichEdit:TRichEdit);
var StringStreamRead, StringStreamWrite:TStringStream;
    RegExpr:TRegExpr;
    Temp:string;
begin
  RichEdit.Lines.BeginUpdate;
  StringStreamRead:=TStringStream.Create('');
  RegExpr:=TRegExpr.Create;
  try
    RichEdit.Text:=html;
    RichEdit.PlainText:=false;
    RichEdit.Lines.SaveToStream(StringStreamRead);
    RegExpr.ModifierG:=false;
    RegExpr.Expression:='[i](.*)[/i]';
    Temp:=StringStreamRead.DataString;
    Temp:=RegExpr.Replace(Temp, '[i]\\i $1\\i0 [/i]', true);
    RegExpr.Expression:='[b](.*)[/b]';
    Temp:=RegExpr.Replace(Temp, '[b]\\b $1\\b0 [/b]', true);
    StringStreamWrite:=TStringStream.Create(Temp);
    try
      RichEdit.Lines.LoadFromStream(StringStreamWrite);
    finally
      StringStreamWrite.free;
    end;
  finally
    StringStreamRead.free;
    RegExpr.free;
    RichEdit.Lines.EndUpdate;
  end;
end;
RegExpr

BackOrifice 22. Feb 2009 06:55

Re: RichEdit: <i>..</i> kursiv setzen
 
Läuft, besten Dank :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz