Einzelnen Beitrag anzeigen

Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#25

Re: RichEdit Wort finden, Farbig und Fett markieren

  Alt 28. Nov 2005, 14:11
Zitat von jim_raynor:
Zitat von Nils_13:
Das läuft aber nicht ganz, es soll sich ja nur auf alle Wörter die 'START' heißen bezeiehen und man soll natürlich noch normal in Schwarz tippen können.
Ist mit einem Richedit nicht möglich bzw. nicht performant zu machen, da du bei jeder Änderung die Markierung neu machen müsstest. Warum nutzt die nicht SynEdit. Eine Memo-Komponente mit Syntax-Highlighting. Das ist doch, was du machen willst oder?

Und bevor du fragst. Mit SynEdit kann man auch eigene Highlighter machen.
Ich weiß. Ich finde es 1. nicht so gut und 2. will ich es selber programmieren.

Wisst ihr warum bei diesem Code von mare_crisium nichts mehr markiert wird ?
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.Click;
  searchStart := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var StartPos, ToEnd, foundAt: integer;
    lsuchText : string;
    lfundStelle : integer;
begin
  lsuchText :='START';
  lfundStelle := Memo1.FindText(lsuchText,searchStart,length(Memo1.text),[]);
  if (lfundStelle > 0)
  then begin
    Memo1.SetFocus;
    Memo1.SelStart := lfundStelle;
    Memo1.SelLength := Length(lsuchText);
    searchStart := Memo1.selStart + Memo1.selLength+1;
    if ( searchStart > length(Memo1.text))
    then searchStart:=0;
  end
  else searchStart:=0;

  if (Memo1.selLength > 0)
  then begin
    Memo1.SelAttributes.color := clBlue;
    Memo1.SelAttributes.style := [fsBold];
  end;
end;
Der Übrsprüngliche Code sah so aus, aber da wurde halt nur ein Wort markiert, obwohl es mehrfach dastand:
Delphi-Quellcode:
 suchText:='START';
    foundAt := Memo1.findText(suchText,0,length(Memo1.text),[stMatchCase]);
    if FoundAt <> -1 then
    begin
      Memo1.SelStart := FoundAt;
      Memo1.SelLength := Length(suchText);
      if (Memo1.selLength > 0)
      then begin
        Memo1.SelAttributes.color := clBlue;
        Memo1.SelAttributes.style := [fsBold];
      end;
      //Memo1.SelAttributes.Color := clGreen;
      //Memo1.SelAttributes.Style := [fsBold];
    end;
Evtl. liegt der Code-Schnipsel
Delphi-Quellcode:
  if (Memo1.selLength > 0)
  then begin
    Memo1.SelAttributes.color := clBlue;
    Memo1.SelAttributes.style := [fsBold];
  end;
an der falschen Stelle, aber ich habe schon alles durchprobiert, auch wie es mare_crisium gemacht hat mit zwei Buttons, es läuft nicht, egal wohin das
Delphi-Quellcode:
  if (Memo1.selLength > 0)
  then begin
    Memo1.SelAttributes.color := clBlue;
    Memo1.SelAttributes.style := [fsBold];
  end;
kommt.
  Mit Zitat antworten Zitat