AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi for-Schleife soll erst bei Button-Click weiterlaufen

for-Schleife soll erst bei Button-Click weiterlaufen

Ein Thema von Kutter111 · begonnen am 30. Jan 2008 · letzter Beitrag vom 2. Feb 2008
Antwort Antwort
Kutter111

Registriert seit: 3. Nov 2005
31 Beiträge
 
Delphi 10.4 Sydney
 
#1

for-Schleife soll erst bei Button-Click weiterlaufen

  Alt 30. Jan 2008, 21:56
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:
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;
Die Suche funktioniert prima, aber das nächste soll erst dann gesucht werden, nachdem ich auf den Button clicke.
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
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: for-Schleife soll erst bei Button-Click weiterlaufen

  Alt 30. Jan 2008, 22:05
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Kutter111

Registriert seit: 3. Nov 2005
31 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: for-Schleife soll erst bei Button-Click weiterlaufen

  Alt 30. Jan 2008, 22:19
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: for-Schleife soll erst bei Button-Click weiterlaufen

  Alt 31. Jan 2008, 09:58
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:
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;
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.

Freundliche Grüße
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#5

Re: for-Schleife soll erst bei Button-Click weiterlaufen

  Alt 31. Jan 2008, 10:18
if AnsiContainsText(sl.ValueFromIndex[x],Edit1.Text) = True then Nicht auf "= True" oder "= False" prüfen. Alte Programmiererweisheit.
  Mit Zitat antworten Zitat
Kutter111

Registriert seit: 3. Nov 2005
31 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: for-Schleife soll erst bei Button-Click weiterlaufen

  Alt 2. Feb 2008, 12:20
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:08 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