Autor Beitrag
Lsm09
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7, Win 8
Turbo Delphi, Delphi 5, Lazarus
BeitragVerfasst: So 28.11.10 18:05 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7, Win 8
Turbo Delphi, Delphi 5, Lazarus
BeitragVerfasst: So 28.11.10 18:52 
ich weiß nicht wie das geht...
Bin noch Anfänger...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 28.11.10 18:54 
Hier findest du etwas zu Schleifen:
www.delphi-treff.de/...ct-pascal/schleifen/

Und einen sehr guten Crashkurs findest du hier:
crashkurs.christian-stelzmann.de
und die neue Version speziell ab Turbo Delphi:
www.christian-stelzm...shkurs_reloaded.html

Ein weiteres Online-Buch:
de.wikibooks.org/wik...grammierkurs:_Delphi

Und wenn du konkret eine Frage stellen würdest, was du nicht verstehst an Schleifen oder so und was du versucht hast, könnte auch jemand etwas dazu sagen...
Lsm09 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7, Win 8
Turbo Delphi, Delphi 5, Lazarus
BeitragVerfasst: Di 18.01.11 18:42 
Wie führe ich einen Befehl für jeden eintrag mit zeitversögerung aus?
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
Timer1.Interval := 1000  // Timer auf eine Sekunde stellen					

Und so startest du ihn:
ausblenden Delphi-Quelltext
1:
Timer1.enabled := true					


Lg
Lsm09 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7, Win 8
Turbo Delphi, Delphi 5, Lazarus
BeitragVerfasst: Di 18.01.11 19:29 
Also, den Timer-Befehl kenne ich auch. Ich dachte an folgenden Timer:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Var zeit:double;
begin
 Zeit:=now+1.0*(1.0/86400.0);//aktuelle zeit plus eine sekunde
 while (now<=Zeit) do Application.processMessages;
 //Anweisung
end;

Aber mein größtes Problem liegt darin, einen Befehl für jeden eintrag einer Listbox auszuführen.
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Di 18.01.11 19:40 
Naja deshalb sind ja Schleifen dafür wichtig.

Hier mal anhand der For-Schleife
ausblenden 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  // nur ausführen, wenn ein eintrag in der listbox vorhanden
    For i := 0 to lst1.items.count do //Das mimimum und maximum festlegen
    begin
      ShowMessage(lst1.items[i]); // immer die aktuelle Zeile anzeigen, mithilfe der Schleifenvariable i, die nach jedem durchgang um eins erhöt wird
    end;
end;


Diese bewirkt, dass dir jede Zeile einer Listbox mit dem Namen lst1 mit einer Showmessage angezeigt wird.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 18.01.11 19:40 
user profile iconLsm09 hat folgendes geschrieben Zum zitierten Posting springen:
Also, den Timer-Befehl kenne ich auch. Ich dachte an folgenden Timer:
Das ist kein Timer, das ist grausam... :roll:

user profile iconLsm09 hat folgendes geschrieben Zum zitierten Posting springen:
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?
ausblenden 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?
ausblenden Delphi-Quelltext
1:
MyListBox.Count					


Oder weißt du nicht wie du den aktuell bearbeiteten Eintrag zwischenspeicherst?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
private
  FCurrentIndex: Integer;

// starten:
if MyListBox.Items.Count > 0 then
begin
  FCurrentIndex := 0;
  MyTimer.Enabled := True;
end;

// im Timer:
MyListBox.Items[FCurrentIndex] // mach was damit...
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7, Win 8
Turbo Delphi, Delphi 5, Lazarus
BeitragVerfasst: Di 18.01.11 22:24 
Hallo, es hat mir geholfen, doch ganz funktioniert es nicht.

Mein Code sieht so aus:
ausblenden 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)!'


Zuletzt bearbeitet von Lsm09 am Di 18.01.11 22:41, insgesamt 1-mal bearbeitet
Lsm09 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7, Win 8
Turbo Delphi, Delphi 5, Lazarus
BeitragVerfasst: Di 18.01.11 22:26 
Was mache ich falsch?
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Di 18.01.11 22:39 
user profile iconLsm09 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo, es hat mir geholfen, doch ganz funktioniert es nicht.

Mein Code sieht so aus:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7, Win 8
Turbo Delphi, Delphi 5, Lazarus
BeitragVerfasst: Di 18.01.11 22:46 
das ich keine Scleife hbe, liegt dran das es nen Timer gibt.
Lsm09 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7, Win 8
Turbo Delphi, Delphi 5, Lazarus
BeitragVerfasst: Sa 26.02.11 21:42 
ich habe jetzt eine Funktionierende lösung gefunden!
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Sa 26.02.11 21:55 
user profile iconLsm09 hat folgendes geschrieben Zum zitierten Posting springen:
ich habe jetzt eine Funktionierende lösung gefunden!
ausblenden 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:

ausblenden 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  // nur ausführen, wenn ein eintrag in der listbox vorhanden
    For i := 0 to lst1.items.count do //Das mimimum und maximum festlegen
    begin
      ShowMessage(lst1.items[i]); // immer die aktuelle Zeile anzeigen, mithilfe der Schleifenvariable i, die nach jedem durchgang um eins erhöt wird
    end;
end;
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 26.02.11 23:31 
Ich schmeiße noch mal ein -1 in die Runde. ;)
Lsm09 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7, Win 8
Turbo Delphi, Delphi 5, Lazarus
BeitragVerfasst: 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...