Entwickler-Ecke
Sonstiges (Delphi) - Befehl in Listbox für jeden eintrag einzelnt ausführen
Lsm09 - So 28.11.10 18:05
Titel: Befehl in Listbox für jeden eintrag einzelnt ausführen
Hallo,
ich habe folgendes Problem:
Ich schreibe gerade ein Programm, das erst guckt, was in einem Ordner ist und dann soll es die Dateien in einen anderen Ordner verschieben.
ABER:
Ich muss immer jede Datei einzelnt auswählen die dann verschieben und dann das mit der nächsten machen usw...
Wäre schön, wenn jemand mir helfen könnte!!
Lsm09
jaenicke - So 28.11.10 18:45
Was hat denn die visuelle Darstellung (ListBox) mit den Daten (deiner Dateiliste) und den Aktionen damit zu tun?
Du hast die Dateiliste vermutlich in einer TStringList? Dann kannst du eine Schleife nehmen und für jede Datei eine Aktion durchführen.
Alternativ kannst du mit SHFileOperation auch einfach alle Dateien oder den Ordner insgesamt verschieben.
Lsm09 - So 28.11.10 18:52
ich weiß nicht wie das geht...
Bin noch Anfänger...
Lsm09 - Di 18.01.11 18:42
Wie führe ich einen Befehl für jeden eintrag mit zeitversögerung aus?
HenryHux - Di 18.01.11 19:26
Das kannst du mit einem Timer machen.
Dazu fügst du die Timer Komponente in dein Formular ein.
Die Länge die er warten soll in ms wird so eingestellt:
Delphi-Quelltext
1:
| Timer1.Interval := 1000 |
Und so startest du ihn:
Delphi-Quelltext
1:
| Timer1.enabled := true |
Lg
Lsm09 - Di 18.01.11 19:29
Also, den Timer-Befehl kenne ich auch. Ich dachte an folgenden Timer:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Var zeit:double; begin Zeit:=now+1.0*(1.0/86400.0); while (now<=Zeit) do Application.processMessages; end; |
Aber mein größtes Problem liegt darin, einen Befehl für jeden eintrag einer Listbox auszuführen.
HenryHux - Di 18.01.11 19:40
Naja deshalb sind ja Schleifen dafür wichtig.
Hier mal anhand der For-Schleife
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm2.btn1Click(Sender: TObject); var i : integer; begin if lst1.items.count>0 then For i := 0 to lst1.items.count do begin ShowMessage(lst1.items[i]); end; end; |
Diese bewirkt, dass dir jede Zeile einer Listbox mit dem Namen lst1 mit einer Showmessage angezeigt wird.
jaenicke - Di 18.01.11 19:40
Lsm09 hat folgendes geschrieben : |
Also, den Timer-Befehl kenne ich auch. Ich dachte an folgenden Timer: |
Das ist kein Timer, das ist grausam... :roll:
Lsm09 hat folgendes geschrieben : |
Aber mein größtes Problem liegt darin, einen Befehl für jeden eintrag einer Listbox auszuführen. |
Wo liegt denn das Problem? Wie sollen wir dir helfen, wenn du nicht konkret sagst wo du nicht weiterkommst? :roll:
Na gut, ich versuche es...
Weißt du nicht wie du auf einen Eintrag zugreifst?
Delphi-Quelltext
1:
| MyListBox.Items[MyIndex] |
So kommst du an den Eintrag mit dem Index MyIndex.
Oder weißt du nicht wie du die Anzahl der Einträge bekommst?
Oder weißt du nicht wie du den aktuell bearbeiteten Eintrag zwischenspeicherst?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| private FCurrentIndex: Integer;
if MyListBox.Items.Count > 0 then begin FCurrentIndex := 0; MyTimer.Enabled := True; end;
MyListBox.Items[FCurrentIndex] Inc(FCurrentIndex); if FCurrentIndex >= MyListBox.Items.Count then MyTimer.Enabled := False; |
Und so könnte ich endlos weitermachen... Also wo ist denn nun das Problem?
Lsm09 - Di 18.01.11 22:24
Hallo, es hat mir geholfen, doch ganz funktioniert es nicht.
Mein Code sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Timer2Timer(Sender: TObject); begin
if Listbox1.Items.Count >= 0 then begin
ClientSocket1.Socket.SendText(Listbox1.Items[FCurrentIndex]); Inc(FCurrentIndex); end; end; |
Aber es kommt die fehlermeldung
'Der Index der Liste überschreitet ds Maximum(0)!'
Lsm09 - Di 18.01.11 22:26
Was mache ich falsch?
HenryHux - Di 18.01.11 22:39
Lsm09 hat folgendes geschrieben : |
Hallo, es hat mir geholfen, doch ganz funktioniert es nicht.
Mein Code sieht so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Timer2Timer(Sender: TObject); begin
if Listbox1.Items.Count >= 0 then begin
ClientSocket1.Socket.SendText(Listbox1.Items[FCurrentIndex]); Inc(FCurrentIndex); end; end; |
Aber es kommt die fehlermeldung
'Der Index der Liste überschreitet ds Maximum(0)!'
Was mache ich falsch?? |
Das mit der Fehlermeldung liegt daran, dass deine Listbox noch kein 0tes Element hat.
Listbox1.Items.Count >= 0 Mache hier das >= zu > .
Ansonsten hast du da garkeine Schleife drin, dass heißt es wird nur einmal ausgeführt, ich weiß jetzt nicht ob das Absicht ist.
Zusätzlich musst du drauf achten, die Variable FCurrentIndex am Programmstart auf 0 zu setzen, da das sonst auch eine Fehlerquelle sein kann.
Lg
Lsm09 - Di 18.01.11 22:46
das ich keine Scleife hbe, liegt dran das es nen Timer gibt.
Lsm09 - Sa 26.02.11 21:42
ich habe jetzt eine Funktionierende lösung gefunden!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var i : integer; begin if lst1.items.count>0 then For i := 0 to lst1.items.count +1 do begin ShowMessage(lst1.items[i]); end; end; |
HenryHux - Sa 26.02.11 21:55
Lsm09 hat folgendes geschrieben : |
ich habe jetzt eine Funktionierende lösung gefunden!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var i : integer; begin if lst1.items.count>0 then For i := 0 to lst1.items.count +1 do begin ShowMessage(lst1.items[i]); end; end; | |
Sieht das denn nicht etwa so aus wie das hier?...
Zitat: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm2.btn1Click(Sender: TObject); var i : integer; begin if lst1.items.count>0 then For i := 0 to lst1.items.count do begin ShowMessage(lst1.items[i]); end; end; | |
Delete - Sa 26.02.11 23:31
Ich schmeiße noch mal ein -1 in die Runde. ;)
Lsm09 - Do 10.01.13 16:30
Boa, ich les da grad, was ich vor nem Jahr an Sachen poduziert habe...
Mittlerweile mach ich sowas innerhalb von 5 sek und ohne google...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!