Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi replace-modalform schreiben (https://www.delphipraxis.net/73629-replace-modalform-schreiben.html)

sancho1980 20. Jul 2006 20:04


replace-modalform schreiben
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,
was der anhang mal werden soll, ist ein modal-dialog, der substring-vorkommnisse in einem string ersetzt.
die funktionen sind alle noch nicht geschrieben, momentan hänge ich an der routine, die ausgeführt wird, sobald 'weiter'
gedrückt wird...
wenn das formular gezeigt wird, wird das erste vorkommnis von old ausgewählt, so weit so gut
wenn dann weiter gedrückt wird, sollte automatisch das nächste ausgewählt werden, doch das tut's eigenartigerweise nicht, seht ihr vllt warum? schaut mal bitte rein, is ganz wenig code!
danke,
martin

mkinzler 20. Jul 2006 20:11

Re: replace-modalform schreiben
 
Warum verwendest du nichr StringReplace ?

sancho1980 20. Jul 2006 20:17

Re: replace-modalform schreiben
 
Zitat:

Zitat von mkinzler
Warum verwendest du nichr StringReplace ?

Das kommt später..
Das Problem ist einfach nur, dass das Selektieren des 2. Vorkommens in diesem TntMemo-Feld nicht funktioniert, obwohl ich es genauso mache, wie bei der OnShow-Funktion..wie du siehst, wird's ja beim ersten Mal noch korrekt ausgewählt
Das Ersetzen ist erstmal nebensächlich, der Benutzer soll ja erstmal gefragt werden, ob er auch wirklich ersetzen will...!

mkinzler 20. Jul 2006 20:21

Re: replace-modalform schreiben
 
Zitat:

doch das tut's eigenartigerweise nicht, seht ihr vllt warum? schaut mal bitte rein,
Was macht er dann? Kommt ein fehler? wenn ja, welcher?

sancho1980 20. Jul 2006 23:42

Re: replace-modalform schreiben
 
Zitat:

Zitat von mkinzler
Zitat:

doch das tut's eigenartigerweise nicht, seht ihr vllt warum? schaut mal bitte rein,
Was macht er dann? Kommt ein fehler? wenn ja, welcher?

Nein, kein Fehler.
Es wird nur einfach nicht ausgewählt.
Führ's einfach mal aus; Bei Oncreate wird das erste Vorkommen des Strings ausgewählt.
Klickst du auf "Weiter" 'soll' das nächste ausgewählt werden (schau dir mal den Code an, der ausgeführt wird, sobald auf "Weiter" geklickt wird..ist ziemlich ersichtlich was ich da erreichen will (denke ich mal)

danke,
martin

mkinzler 21. Jul 2006 06:51

Re: replace-modalform schreiben
 
Ist new genauso lang wie old? Sonst wirst du deinem Ansatz sowieso Probleme bekommen.

sancho1980 21. Jul 2006 09:42

Re: replace-modalform schreiben
 
Zitat:

Zitat von mkinzler
Ist new genauso lang wie old? Sonst wirst du deinem Ansatz sowieso Probleme bekommen.

Aber das ist nicht der Punkt.

Schau mal auf

Delphi-Quellcode:
procedure TReplaceDialog.FormShow(Sender: TObject);
Da wird das erste Vorkommen ausgewählt mit

Delphi-Quellcode:
i := WidePosEx(old, self.TntMemo1.Text, self.index);
self.TntMemo1.SelStart := i - 1;
self.TntMemo1.SelLength := Length(self.old);
self.TntButton2.Enabled := true;
self.index := i + Length(self.old);
In
Delphi-Quellcode:
procedure TReplaceDialog.TntButton2Click(Sender: TObject);
soll das nächste Vorkommen von old ausgewählt werden mit

Delphi-Quellcode:
i := WidePosEx(old, self.TntMemo1.Text, self.index);
//ShowMessage(IntToStr(i));
self.TntMemo1.SelStart := i - 1;
self.TntMemo1.SelLength := Length(self.old);
self.TntButton2.Enabled := true;
self.index := i + Length(self.old);
Also quasi genau der gleich Code wir oben. Wenn ich auch noch ein ShowMessage einfüge (Kommentar), dann sehe ich, dass auch das nächste Vorkommen richtig gefunden wurde, aber eigenartigerweise das mit dem Auswählen im Memo nicht klappt...Darum geht's

mkinzler 21. Jul 2006 09:51

Re: replace-modalform schreiben
 
Solange du keine Ersetzungen machst, wenn aber (und die Länge differiert) bekommst du Probleme.

sancho1980 21. Jul 2006 09:57

Re: replace-modalform schreiben
 
Zitat:

Zitat von mkinzler
Solange du keine Ersetzungen machst, wenn aber (und die Länge differiert) bekommst du Probleme.

Nein bekomm ich nicht.
Änder mal
Delphi-Quellcode:
procedure TReplaceDialog.FormShow(Sender: TObject);
ab:

Delphi-Quellcode:
i := WidePosEx(old, self.TntMemo1.Text, self.index);
  self.TntMemo1.SelStart := i - 1;
  self.TntMemo1.SelLength := Length(self.old);
  self.TntMemo1.SelText := '1234';
  self.TntButton2.Enabled := true;
  self.index := i + Length(self.old);
Das mit dem Ersetzen geht dann alles ganz einfach. Das Problem ist das Auswählen.

edit:

PS: Habs grad raus: Vor dem zweiten
Delphi-Quellcode:
self.TntMemo1.SelStart := i - 1;
muss noch ein
Delphi-Quellcode:
self.TntMemo1.SetFocus();


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr.

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