AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TReplaceDialog - Wie geht das ???

Ein Thema von R2D2 · begonnen am 20. Mai 2006 · letzter Beitrag vom 20. Mai 2006
Antwort Antwort
Benutzerbild von R2D2
R2D2

Registriert seit: 20. Jan 2006
Ort: München
253 Beiträge
 
Delphi 2005 Personal
 
#1

TReplaceDialog - Wie geht das ???

  Alt 20. Mai 2006, 15:35
Hallo!

Ich komme einfach nicht mit dem TReplaceDialog klar . Ich möchte mir Optionen ein Richedit durchsuchen. Wie mache ich das?????
if then then then = else else else = then;

Meine Webseite
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: TReplaceDialog - Wie geht das ???

  Alt 20. Mai 2006, 16:01
Kannst du deine Frage evtl. etwas genauer formulieren?
Mit welchen Optionen möchtest du denn durchsuchen?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von R2D2
R2D2

Registriert seit: 20. Jan 2006
Ort: München
253 Beiträge
 
Delphi 2005 Personal
 
#3

Re: TReplaceDialog - Wie geht das ???

  Alt 20. Mai 2006, 16:03
Alle Optionen die TReplaceDialog hat sollen funktionnieren. Ich sitze jetzt schon seit 3 Stunden dran, krigs aber immer noch nich gebacken!
if then then then = else else else = then;

Meine Webseite
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TReplaceDialog - Wie geht das ???

  Alt 20. Mai 2006, 16:13
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...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

Re: TReplaceDialog - Wie geht das ???

  Alt 20. Mai 2006, 16:14
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: TReplaceDialog - Wie geht das ???

  Alt 20. Mai 2006, 16:19
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!
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: TReplaceDialog - Wie geht das ???

  Alt 20. Mai 2006, 16:53
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
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von R2D2
R2D2

Registriert seit: 20. Jan 2006
Ort: München
253 Beiträge
 
Delphi 2005 Personal
 
#8

Re: TReplaceDialog - Wie geht das ???

  Alt 20. Mai 2006, 17:04
Super!!! Vielen Dank an Alle!!!
if then then then = else else else = then;

Meine Webseite
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: TReplaceDialog - Wie geht das ???

  Alt 20. Mai 2006, 18:38
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
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 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