So, hier mal ein kleines Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Length(RichEdit1.SelText) > 0 then
ReplaceDialog1.FindText := RichEdit1.SelText; // Markierter Text als FindText
ReplaceDialog1.Execute; // ReplaceDialog anzeigen
end;
procedure TForm1.ReplaceDialog1Find(Sender: TObject); // OnFind
var s, sub: string;
begin
RichEdit1.SetFocus;
if RichEdit1.SelLength > 0 then
RichEdit1.SelStart := RichEdit1.SelStart +1; // ergänzt, sonst wurde der erste Buchstabe übersprungen
if frMatchCase in ReplaceDialog1.Options then
begin
s := RichEdit1.Lines.Text; // Groß-/Kleinschreibung beachten
sub := ReplaceDialog1.FindText;
end
else
begin
s := AnsiUpperCase(RichEdit1.Lines.Text); // nicht beachten
sub := AnsiUpperCase(ReplaceDialog1.FindText);
end;
// hier dann SelStart+1 anstatt +2
RichEdit1.SelStart := PosEx(sub, s, RichEdit1.SelStart+1) -1; // Suche an aktueller Position beginnen
RichEdit1.SelLength := Length(ReplaceDialog1.FindText); // Text markieren
if RichEdit1.SelStart = RichEdit1.GetTextLen then // Ende erreicht?
begin
ShowMessage('Textende erreicht!');
RichEdit1.SelStart := 0; // zum Anfang gehen
end;
end;
procedure TForm1.ReplaceDialog1Replace(Sender: TObject); // OnReplace
var Flags: TReplaceFlags;
begin
if frReplaceAll in ReplaceDialog1.Options then
begin
if frMatchCase in ReplaceDialog1.Options then
Flags := [] // Groß-/Kleinschreibung beachten
else
Flags := [rfIgnoreCase]; // nicht beachten
RichEdit1.Lines.Text := StringReplace(RichEdit1.Lines.Text,
ReplaceDialog1.FindText, // alles ersetzen
ReplaceDialog1.ReplaceText,
[rfReplaceAll]+Flags);
ShowMessage('Alles ersetzt!');
end
else
begin
if (not (frMatchCase in ReplaceDialog1.Options) // nicht Groß-/Kleinschreibung beachten
and (AnsiUpperCase(RichEdit1.SelText) = AnsiUpperCase(ReplaceDialog1.FindText)))
or (RichEdit1.SelText = ReplaceDialog1.FindText) then //oder Texte identisch
RichEdit1.SelText:=ReplaceDialog1.ReplaceText; // markierten Text ersetzen
ReplaceDialog1Find(Sender); // nächstes Vorkommen suchen und markieren
end;
end;
Das einzige was noch nicht drin ist, ist die Beachtung von Groß-/Kleinschreibung.
Kannst du aber mit:
if frMatchCase in ReplaceDialog1.Options then
ganz schnell noch einbauen.
//Edit: ist eingebaut!
MfG
Martin