![]() |
Selattribut zurücksetzen [RichEdit]?
Hallo Leute
Ich hab Mir eine Procedur geschrieben die Mir bestimmte Wörter Fett und Blau anzeigt, Soweit klappt das auch zwischen den Reservierten Wörtern wird wieder normal geschrieben. Jetzt mein Problem hinter dem letztem reservierten Wort wird wieder in Fett Blau geschrieben was nicht sein sollte. Hätte jemand eine Idee dazu - Wie kann Ich die Selattribute im Rich wieder zurücksetzen ?
Delphi-Quellcode:
var
Form1: TForm1; Reserviert: array[0..2] of string =('end', 'begin', 'test'); implementation {$R *.dfm} procedure ReserviertBold(RichEdit1: TRichedit); var i,j:Integer; Bold, Str: String; begin with RichEdit1 do begin for i:=0 to Length(Text) do for j:= 0 to High(Reserviert) do begin Bold:= Uppercase(Reserviert[j]); Str:= Uppercase(Copy(Text, i, Length(Bold))); Text:=StringReplace(Text,Bold,Uppercase(Bold),[rfReplaceAll, rfIgnoreCase]); if (Uppercase(Str) = Uppercase(Bold)) then begin SelStart:= i-1; Sellength:= Length(Bold); SelAttributes.Color := clBlue; SelAttributes.Style:= [fsbold] end else begin SelStart:= i-1; SelAttributes.Color := clBlack; SelAttributes.Style:= []; end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin ReserviertBold(RichEdit1); end; |
Re: Selattribut zurücksetzen [RichEdit]?
Moin Blackheart,
Du müsstest Dir in der inneren Schleife merken wie weit Du gekommen bist, und dann nach dieser den Rest selektieren und mit normalen Attributen versehen. Ausserde sehe ich, dass Du die Eigenschaft Text des RichEdit sehr oft, und dann auch noch in einer Schleife verwendest. Das ist allerdings ausgesprochen schlecht für die Performance, da diese Eigenschaft bei jedem Lesezugriff aus den Zeilen aufgebaut wird, bzw. bei jedem Schreibzugriff auf die Zeilen aufgeteilt wird. Bei nur wenigen Zeilen merkt man das wohl noch nicht, aber wenn es mehr wird kann es extrem langsam werden. Entweder Du speicherst Dir den Text einmal zwischen in einer Stringvariablen, und schreibst ihn am Ende wieder zurück, oder Du gehtst zeilenweise durch, was in Deinem Falle wohl sinnvoller wäre. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz