Thema: Delphi Nur ganze Wörter finden

Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Nur ganze Wörter finden

  Alt 8. Aug 2004, 18:13
Ich habe hier eine Funktion die einen SubString in einem String sucht und den Index des ersten Zeichens zurückgibt:
Delphi-Quellcode:
function Find(StartPos: Integer; const Text, Word: string; WholeWordsOnly:
  Boolean = False): Integer;
var
  Index: Integer;
begin
  if WholeWordsOnly then
  begin
    Index := (PosEx(AnsiUppercase(Word), AnsiUpperCase(Text), StartPos)) - 1;
    if Text[Index + length(Word) + 1] in WordDelimiter then
      result := Index
    else
      result := -1;
  end
  else
    result := (PosEx(AnsiUppercase(Word), AnsiUpperCase(Text), StartPos)) - 1;
end;
Nun wollte ich sie so erweitern, dass man optional nur nach ganzen Wörten suchen kann. Leider ist da irgendwo noch ein Bug drinne. Er bricht einfach mitten drinne ab und findet keine Wörter mehr, obwohl noch ganze Wörter zu finden wären.

Einsetzten wollte ich das hier:
Delphi-Quellcode:
function HighlightWords(RichEdit: TRichEdit; Words: TStrings; FontStyle:
  TFontStyles;
  Color: TColor): Cardinal;
var
  i: Integer;
  LastWordPos: Integer;
  HighLightedWords: Cardinal;
begin
  LastWordPos := 0;
  HighLightedWords := 0;
  RichEdit.Lines.BeginUpdate;
  for i := 0 to Words.Count - 1 do
  begin
    while LastWordPos <> 1 do
    begin
      LastWordPos := Find(LastWordPos, RichEdit.Text, Words[i]);
      writeln(Words[i] + ': ' + IntToStr(LastWordPos));
      RichEdit.SelStart := LastWordPos;
      RichEdit.SelLength := length(Words[i]);
      RichEdit.SelAttributes.Color := Color;
      RichEdit.SelAttributes.Style := FontStyle;
      LastWordPos := LastWordPos + 2;
      Inc(HighLightedWords);
    end;
    LastWordPos := 0;
  end;
  RichEdit.SelStart := 0;
  RichEdit.Lines.EndUpdate;
  result := HighLightedWords;
end;
Jetzt weiß ich nicht, ob der Fehler in Find oder HighLightWord liegt. Wenn sich da bitte jemand erbarmen könnte und auch mal einen Blick draufwerfen könnte. Ich beschäftige mich schon mehrere Tage damit und sehe den Wald vor lauter Bäumen schon nicht mehr.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat