![]() |
Delphi-Version: 10.2 Tokyo
String in Memo suchen
Hallo miteinander,
Programmaufbau:
Code:
Meine Idee:
Form5 -> Memo5(TMemo), Button5(TButton)
Form6 -> Memo6(TMemo), Button6(TButton) Das Form6.Memo6 wird zeilenweise mit Strings gefüllt. Durch Klick auf Button6 wird der Inhalt von Memo6 nach Memo5 übertragen. ---- Bis hierhin klappt alles. Nun soll beim Klick auf Button5 das Memo5 nach einem String durchsucht werden, verbunden durch eine Abfrage. Heißt: Wenn der String gefunden wurde, dann führe etwas aus.
Code:
Folgender Fehler erscheint:
procedure TForm5.Button5Click(Sender: TObject);
begin if ((Pos('blablabla', Memo5.Lines)) := True) then begin TuEtwas; end; end;
Delphi-Quellcode:
Wenn ich die if-Zeile durch folgende ersetze, klappt es auch nicht:
E2250 Es gibt keine überladene Version von 'Pos', die man mit diesen Argumenten aufrufen kann
Delphi-Quellcode:
Fehler:
if (Memo5.Lines.IndexOf('blablabla') = True) then
Delphi-Quellcode:
E2008 Inkompatible Typen
Was mache ich falsch? Hat jemand einen Denkanstoß für mich parat? :) Gruß Kratos |
AW: String in Memo suchen
Versuche es mal damit...
if Pos('blablabla', Memo5.text) <> 0 then |
AW: String in Memo suchen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin if Memo1.Lines.Text.Contains('Derp') then ShowMessage('Derp'); end; |
AW: String in Memo suchen
Hallo,
pos liefert einen Index (Integer) zurück, keinen Boolean. Memo5.Text sollte im ersten Beispiel funktionieren. Grüße Klaus |
AW: String in Memo suchen
Vielen Dank Leute für die sauschnellen Antworten! Ihr seid super! :)
@Klaus01 Danke für deine Erklärung. Ich hab die Verbesserung von @ pesi getestet. Funktioniert wunderbar! Gruß Kratos EDIT: Hab eben auch noch das Bsp von @Der schöne Günther getestet. Klappt auch einwandfrei :* |
AW: String in Memo suchen
Hi Leute,
ich nochmal. Ich hab eure Verbesserungsvorschläge umgesetzt und noch zwei Verzweigungen drumgebaut. Aber da taucht wieder ein Problem auf, welches ich nicht gelöst bekomme. Programmaufbau:
Code:
Form6 -> ListBox6, Memo6
Form7 ...
Delphi-Quellcode:
und
ListBox6
Delphi-Quellcode:
sind nebeneinander platziert und beide sind sichtbar. In
Memo6
Delphi-Quellcode:
sind 6 Items abgespeichert. Per Doppelklick auf ein Item soll dieses in
ListBox6
Delphi-Quellcode:
geschrieben werden.
Memo6
Meine Idee: Es soll jedes mal überprüft werden, ob das doppelgeklickte Item aus
Delphi-Quellcode:
bereits in
ListBox6
Delphi-Quellcode:
vorhanden ist.
Memo6
Wenn Nein, soll es in
Delphi-Quellcode:
geschrieben werden.
Memo6
Wenn Ja, soll es NICHT in
Delphi-Quellcode:
geschrieben werden.
Memo6
Wird das 5. Item doppelgeklickt, geht Form7 auf (das klappt).
Code:
procedure TForm6.ListBox6DblClick(Sender: TObject);
var i: Integer; begin if (ListBox6.ItemIndex) = 5 then begin with TForm7.Create(Self) do try ShowModal; finally Free; end; end else if Pos(ListBox6.Items.Text, Memo6.Lines.Text) <> 0 then begin Memo6.Lines.Add(ListBox6.Items[ListBox6.ItemIndex] + #10#13); end else begin for i := 0 to ListBox6.Items.Count - 1 do if (Memo6.Lines.Text.IndexOf(ListBox6.Items[i]) < 0) then begin Memo6.Lines.Delete(i); end; end; Ich kann mir gut vorstellen, dass diese Zeile falsch ist:
Delphi-Quellcode:
Es kommt keine Fehlermeldung. Jedoch kann man die Items aus ListBox6 doppelklicken wie man will, es passiert nichts.
else if Pos(ListBox6.Items.Text, Memo6.Lines.Text) <> 0 then
Könnt ihr mir helfen auf einen Lösungsansatz zu kommen, bitte? :) |
AW: String in Memo suchen
Du willst nicht den kompletten Inhalt der Listbox im Memo suchen sondern nur den markierten String. So müsste es tun (ungetestet):
Delphi-Quellcode:
PS: Bitte benenne deine Controls sauber! Keiner weiß, was ListBox6 und Memo6 ist, und selbst du wirst das in ein paar Wochen nicht mehr wissen.
else if Pos(ListBox6.Items[ListBox6.ItemIndex], Memo6.Lines.Text) <> 0 then begin
... end ... Grüße Dalai |
AW: String in Memo suchen
So könntest du checken, ob das Element aus Liste bereits im Memo vorhanden ist:
Delphi-Quellcode:
lbel := Listbox1.Items[ListBox1.ItemIndex];
if pos( #13#10 + lbel + #13#10, #13#10 + memo1.Text ) = 0 then Memo1.Lines.Add( lbel ); Bei Dalais Lösung würde zum Beispiel das Element "Anna" nicht zu Memo hinzugefügt werden, wenn "Annabelle" bereits im Memo vorhanden wäre. Eventuell lohnt sich für dich auch ein Blick auf TStringList und die Eigenschaft Duplicates. |
AW: String in Memo suchen
Na dann lieber gleich ein Memo.Lines.IndexOf, wie es schon ein paar Zeilen weiter unten (in der for-Schleife) steht. Verstehe sowieso nicht, warum einmal mit Pos und einmal mit IndexOf gesucht/verglichen wird.
Delphi-Quellcode:
Je nachdem, ob case-sensitiv oder -insensitiv gesucht werden soll, kann man ja noch ein UpperCase/LowerCase mit reinbringen.
if (Memo6.Lines.IndexOf(ListBox6.Items[ListBox6.ItemIndex]) < 0) then
... Grüße Dalai |
AW: String in Memo suchen
Ja klar Dalai - mach ich ja sonst auch so... es wäre gut, wenn man einer Meldung ein ttl (zum Beispiel 0) mitgeben könnte :).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 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-2025 by Thomas Breitkreuz