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;