Wyszukiwanie tekstu (nietypowe)

0

Mam problem. W moim edytorze tekstu zamieściłem procedurę wyszukującą. Skopiowałem ją z źródła edytora tekstu dołączone go na płycie do jakiejś fajnej książki do Delphi. Gdy włączam procedurę wyszukującą, wpisuję tekst i klikam na Znajdź następny i... nic się nie dzieje mimo, że wpisany tekst znajduje się w dokumencie (powinien się podświetlać [zaznaczać]). W projekcie z którego pożyczyłem tą procedurę kod działa prawidłowo. Co jest źle? Przepisałem wszystko (chyba) co było potrzebne. Eventsy OnFind i onReplace, funkcję Znajdz, zadeklarowałem zmienną globalną "poczatek". Proszę o pomoc. Z góry dzięki. Poniżej zamieszczam kod źródłowy funkcji, jeżeli macie lepszą - podzielcie się, proszę!

// procedura znajdujaca tekst
procedure Znajdz(Tekst : TMemo; Wzorzec : AnsiString; var Poczatek : integer);
{ wyszukanie wzorca w tekście }
var
  buf : PChar;                         { bieżący początek przeszukiwanego tekstu }
  pozycja : integer;
begin
  buf := @Tekst.Lines.Text[Poczatek+1];{ ustal nowy adres początku wyszukiwania }
  { znajdź szukany tekst i przesuń adres na pierwszy znak znalezionego łańcucha }
  pozycja := AnsiPos(Wzorzec, buf);
  Poczatek := Poczatek + pozycja;
  if (pozycja > 0) then                { jeśli znaleziono, poczatek będzie > 0 }
  begin
    Tekst.SelStart := Poczatek-1;      { zaznacz fragment zawartości pola Tekst }
    Tekst.SelLength := Length(Wzorzec);{ od Poczatku na długość tekstu Wzorzec }
  end;
end;


//zdarzenie OnFind komponentu FindDialog (odWyszukaj)
procedure TForm1.odWyszukajFind(Sender: TObject);
begin
  Znajdz(Tekst, odWyszukaj.FindText, poczatek);
end;


//po wybraniu pozycji w menu (Znajdź...)
procedure TForm1.Znajd1Click(Sender: TObject);
begin
if tekst.Lines.Strings[0] <> '' then
 begin
  odWyszukaj.Execute;
  poczatek := 0;
 end;

end;


//po wybraniu pozycji w menu (Zamień...)
procedure TForm1.Znajdizamie1Click(Sender: TObject);
begin
if tekst.Lines.Strings[0] <> '' then
 begin
  odZamien.Execute;
  poczatek := 0;
 end;
end;

//zdarzenie OnFind komponentu ReplaceDialog (odZamien)
procedure TForm1.odZamienFind(Sender: TObject);
begin
  Znajdz(Tekst, odZamien.FindText, poczatek);
end;


//zdarzenie OnReplace komponentu ReplaceDialog (odZamien)
procedure TForm1.odZamienReplace(Sender: TObject);
begin
  if frReplaceAll in odZamien.Options then { zamieniamy wszystko }
    Tekst.Lines.Text := AnsiReplaceStr(Tekst.Lines.Text, odZamien.FindText,
                                       odZamien.ReplaceText)
  else { zamieniamy tylko bieżące wystąpienie }
    if Tekst.SelLength > 0 then
    begin
      Tekst.Lines.Text := StuffString(Tekst.Lines.Text, Tekst.SelStart+1, Tekst.SelLength,
                                      odZamien.ReplaceText);
      Znajdz(Tekst, odZamien.FindText, poczatek);
    end;
end;
0

Daj se luz, użyj ******** ;)

//DOPISANE
Oj, głupotę pierd****łem chodziło mi o FindDialog.

0

A nie jest tak, że jak zaczynasz szukać od

Poczatek + pozycja

(bo tak deklarujesz to w funkcji poszukiwania), to znajdujesz ten plik, który już wcześniej znalazłeś? Przecież pozycja to będzie początek szukanego ciągu znaków, czyli poszukiwanie kolejnego powoduje de facto znalezienie tego samego. Przesuń poczatek

 jeszcze o dlugosc poszukiwanego ciągu i powinno działać (o ile oczywiście w tym tkwi problem :) )

1 użytkowników online, w tym zalogowanych: 0, gości: 1