![]() |
for-Schleife soll erst bei Button-Click weiterlaufen
Hallo,
ich suche nach einer Möglichkeit, daß eine for-Schleife erst dann weiterläuft, wenn ich auf den Button Suche clicke. In der Schleife wird eine TStringlist (ini-Paare) nach Werten abgefragt und mit einer Eingabe im Edit verglichen. Es soll dann den String (in diesem Fall der Section-Name) in einer ListBox markieren:
Delphi-Quellcode:
Die Suche funktioniert prima, aber das nächste soll erst dann gesucht werden, nachdem ich auf den Button clicke.
procedure TForm2.SuchBtnClick(Sender: TObject);
var i,x: Integer; begin for i := 0 to Form1.ListBox1.Items.Count - 1 do begin ini.ReadSectionValues(Form1.ListBox1.Items.Strings[i],sl); for x := 0 to sl.Count - 1 do begin if AnsiContainsText(sl.ValueFromIndex[x],Edit1.Text) = True then begin Form1.ListBox2.Items.Add(Form1.ListBox1.Items.Strings[i]);//<- Als Kontrolle Form1.ListBox1.ItemIndex:=i; Form1.SetFocus; end; end; end; end; Ich habe schon Break nach Form1.SetFocus versucht, aber die Schleife läuft weiter. In der Kontrolle werden alle gefundenen Sections gleich in die ListBox2 geschrieben. Wenn ich Break nach end setze bricht die Schleife zwar ab, die Kontrolle zeigt mir aber nach dem Drücken des Suche-Btn immer nur das erste Section an. Kann mir jemand helfen? Vielen Dank im Voraus Kutter111 |
Re: for-Schleife soll erst bei Button-Click weiterlaufen
Hallo Kutter,
du kannst die Suche entweder in einen eigenen Thread auslagern und den nächsten Schleifendurchlauf von dem Zustand einer Variable abhängig machen, die bei jeden Schleifendurchlauf zurückgesetzt wird und erst durch das Betätigen des Schalters wieder aktiv wird. Alternativ änderst du die Schleife so, dass immer nur ein Durchlauf stattfindet und rufst die daraus entstehende Prozedur bei jedem Betätigen des Schalters wieder auf. Die beiden Schleifenvariablen müssen dafür am besten als glbale Variablen bzw. Form- Variable (z.B. im privat Teil von TForm1) angelegt sein. |
Re: for-Schleife soll erst bei Button-Click weiterlaufen
Die Idee mit den Threads ist mit Sicherheit eine gute Lösung, doch damit kenne ich mich leider nicht gut aus.
Aber die zweite müsste umsetzbar sein, auch für mich. Ich werde mich gleich dran machen. Vielen Dank MrSpock. Für weitere Lösungsvorschläge bin ich trotzdem immer dankbar. Kutter111 |
Re: for-Schleife soll erst bei Button-Click weiterlaufen
Hallo,
hier handelt es sich ja wohl um eine schrittweise Suche. Der Abbruch der Suchschleife soll ja nicht durch den Benutzer erfolgen, sondern erfolgt bei Eintritt des Abbruchkriteriums. Der Trick mit der fortgesetzten Suche besteht darin, dass man den Wert der Laufvariablen nach einem Suchtreffer aufheben muss:
Delphi-Quellcode:
Beim Aufruf zeigt index auf die letzte Fundstelle, beim ersten Aufruf ist index mit -1 zu initialisieren. Kehrt die Funktion mit index = s.Count zurück, dann können die nächsten SectionValues durchsucht werden.
function FindNextValue(s: TStrings; const value: string; var index: Integer): Boolean;
begin Result := False; while not Result and (index < Pred(s.Count)) do begin Inc(index); Result := AnsiSameText(s.ValueFromIndex[index], value); end; end; Freundliche Grüße |
Re: for-Schleife soll erst bei Button-Click weiterlaufen
Delphi-Quellcode:
Nicht auf "= True" oder "= False" prüfen. Alte Programmiererweisheit. :mrgreen:
if AnsiContainsText(sl.ValueFromIndex[x],Edit1.Text) = True then
|
Re: for-Schleife soll erst bei Button-Click weiterlaufen
Hallo,
vielen Dank für die Antworten und Hinweise. Ich bin gerade daran die Suche umzuprogrammieren. Falls es nicht so richtig klappt, darf ich bestimmt nochmal nachfragen?! @marabu: AnsiSameText? Das kannte ich noch nicht. Gleich mal Delphi-Online-Hilfe fragen. Kutter111 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:24 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