Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Selattribut zurücksetzen [RichEdit]? (https://www.delphipraxis.net/82790-selattribut-zuruecksetzen-%5Brichedit%5D.html)

Blackheart 19. Dez 2006 11:49


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;

Christian Seehase 19. Dez 2006 12:33

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 02:01 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