Delphi » FAQ

Zamiana (Replace) tekstu w RichEdit

Trepp

Na początku wstawiamy komponent ReplaceDialog.
Potem w Object Inspektorze na zakładce Events klikamy podwójnie na pustą rubryczkę obok ReplaceText.
Teraz mały kodzik, który musimy tam wstawić (dla komponentu RichEdit):

<font face="Courier New"> ```delphi procedure TForm1.ReplaceDialog1Replace(Sender: TObject);

var
SelPos: Integer;
begin
with TReplaceDialog(Sender) do
begin
SelPos := Pos(FindText, RichEdit1.Lines.Text);
if SelPos > 0 then
begin
RichEdit1.SelStart := SelPos - 1;
RichEdit1.SelLength := Length(FindText);
{ Replace selected text with ReplaceText }
RichEdit1.SelText := ReplaceText;
end
else MessageDlg(Concat('Nie znaleziono więcej "', FindText, '" w dokumencie'), mtError, [mbOk], 0);

end;

end;

</span>

I tyle. Musimy jeszcze zrobić button lub cokolwiek innego, i w OnClicku wstawiamy :
<font face="Courier New">
```delphi
ReplaceDialog1.Execute;
</span>

I tyle. Powinno działać.

W ReplaceDialog w events wydarzenie "ON Find" Należy wypełnić kodem:

<font face="Courier New"> ```delphi procedure TForm1.ReplaceDialogFind(Sender: TObject); var FoundAt: LongInt; StartPos, ToEnd: Integer; begin with RichEdit1 do begin { jeśli jest zaznaczony tekst, to zaczyna szukać od momentu zaznaczonego tekstu jeśli nie ma, to od początku} if SelLength < 0 then StartPos := SelStart + SelLength else StartPos := 0;

{ ustala koniec przeszukiwanego tekstu }
ToEnd := Length(Text) - StartPos;

FoundAt := FindText(ReplaceDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
if FoundAt <> -1 then
begin
  SetFocus;
  SelStart := FoundAt;
  SelLength := Length(ReplaceDialog1.FindText);
end;

end;
end;

</span>

Teraz powinno działać :) 
FAQ

5 komentarzy

Tyle tego szykałem i nareszcie znalazłem :). Mam tylko jedno zastżezenie - nie chodzi "Zamien wszystkie" i nie zaznacza się znaleziony tekst w RichEdit. Ale troche pomyśle i jakoś poprawie :). U mnie w HELPIE tego nie ma!!!

Po co to komu jak to jest w Helpie do Delphi :/

Nareście ktoś się wysilił tyle tego szukałem, na forum muwili że to już było pełno razy, no ale teraz jest

nieeee DO FAQ