Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TReplaceDialog - Wie geht das ??? (https://www.delphipraxis.net/69820-treplacedialog-wie-geht-das.html)

R2D2 20. Mai 2006 14:35


TReplaceDialog - Wie geht das ???
 
Hallo!

Ich komme einfach nicht mit dem TReplaceDialog klar :( :( :( . Ich möchte mir Optionen ein Richedit durchsuchen. Wie mache ich das?????

Martin K 20. Mai 2006 15:01

Re: TReplaceDialog - Wie geht das ???
 
Kannst du deine Frage evtl. etwas genauer formulieren?
Mit welchen Optionen möchtest du denn durchsuchen?

R2D2 20. Mai 2006 15:03

Re: TReplaceDialog - Wie geht das ???
 
Alle Optionen die TReplaceDialog hat sollen funktionnieren. Ich sitze jetzt schon seit 3 Stunden dran, krigs aber immer noch nich gebacken!

Martin K 20. Mai 2006 15:13

Re: TReplaceDialog - Wie geht das ???
 
Hab zwar schon lange nicht mehr mit ReplaceDialogs gearbeitet, aber ich denke so in etwa ging das:

Mal ein Beispiel:
Delphi-Quellcode:
if ReplaceDialog1.Execute then
begin

  if frReplaceAll in ReplaceDialog1.Options then
    // User hat auf "Alles ersetzen" geklickt

  else
  if frReplace in ReplaceDialog1.Options then
    // User hat auf "Ersetzen" geklickt

  else
    // User hat auf "Weitersuchen" geklickt

end
else
  // User hat auf "Abbrechen" geklickt
Natürlich geht das auch mit einer Case-Abfrage...

himitsu 20. Mai 2006 15:14

Re: TReplaceDialog - Wie geht das ???
 
Delphi-Quellcode:
if ReplaceDialog1.Execute then
  // ReplaceDialog1.FindText suchen und durch ReplaceDialog1.ReplaceText ersetzen
  // z.B.: RichEdit1.Lines.Text := StringReplace(RichEdit1.Lines.Text, ReplaceDialog1.FindText, ReplaceDialog1.ReplaceText, [rfReplaceAll]);
[add]
wußte ja nicht, dat rfReplaceAll auch in .Options "gesetzt wird, also dat vom Vorgänger ^^

[add2]
gibt's da nicht eine Demo im Delphi ... einen Editor mit TRichEdit und suchen/ersetzen war da auch mit drin (denk ich)

Martin K 20. Mai 2006 15:19

Re: TReplaceDialog - Wie geht das ???
 
:oops: Uuups...
Das heißt alles fr... und nicht rf...
//Edit: Beitrag oben bearbeitet!
[] gehörten da auch nicht hin...


Übrigens:
Beim ReplaceDialog gibts auch zwei Ereignisse:
- OnFind
- OnReplace

Bei OnReplace musst du dann nur noch überprüfen, ob frReplaceAll in den Options steht!

Martin K 20. Mai 2006 15:53

Re: TReplaceDialog - Wie geht das ???
 
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:
Delphi-Quellcode:
if frMatchCase in ReplaceDialog1.Options then
ganz schnell noch einbauen.
//Edit: ist eingebaut!

MfG
Martin

R2D2 20. Mai 2006 16:04

Re: TReplaceDialog - Wie geht das ???
 
Super!!! Vielen Dank an Alle!!! :-D :-D :-D

Martin K 20. Mai 2006 17:38

Re: TReplaceDialog - Wie geht das ???
 
So, hab den Quellcode oben nochmal komplett überarbeitet, da einige Fehler drin waren...

Außerdem wird jetzt auch Groß-/Kleinschreibung berücksichtigt bzw. nicht berücksichtigt.

MfG
Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz