![]() |
ListBox Einträge verschieben/kopieren - Progressbar
Moin,
Ich kann über den OpenDialog Files laden, die anschließend in ListBoxen dann angezeigt werden. In der einen sieht man den Dateinamen und in der anderen den Pfad. Jetzt kann ich in einer ListBox die Einträge mit der Maus verschieben. Wie kann ich das nun programmieren, dass der gleiche Eintrage in der anderen ListBox auch dementsprechend verschoben wird? Vielen Dank schonmal! MfG, Shadow |
Re: ListBox Einträge verschieben/kopieren
Ok, ich habe das jetzt hinbekommen - war doch ganz einfach! :)
Eine Frage hab ich nun noch: Wenn ich jetzt auf einen Button klicke sollen die ganzen Dateien, nacheinander wie das in der ListBox geordnet ist, in einen gewünschten Ordner kopiert werden (der Pfad steht ja in der ListBox). Kann mir dazu jemand helfen? |
Re: ListBox Einträge verschieben/kopieren
Das geht mit einer Schleife und
![]()
Delphi-Quellcode:
Schöner wäre es jedoch, wenn du die Pfade intern speicherst und damit arbeitest (Bsp: TStringList).
for i := 0 to Listbox1.Items.Count - 1 do
CopyFile(IncludeTrailingPathDelimiter(ListBox1.Items[i]) + ListBox2.Items[i]); Aber bitte erstelle zukünftig pro Frage einen neuen Thread. Schön wäre es auch, wenn du die Lösung zum ersten Problem noch posten würdest, damit andere, die ähnliche Probleme haben, einen Lösungsansatz finden. |
Re: ListBox Einträge verschieben/kopieren
Danke, hab das nun auch hinbekommen!
Meine Lösung zum ersten Problem:
Delphi-Quellcode:
Ich weiß nicht, ob ich jetzt noch einen Thread öffnen soll, aber während das Programm die Dateien kopiert...kann man da eine Fortschrittsanzeigen anzeigen lassen? Evtl. auch das normale von Windows...damit man weiß, wann das fertig kopiert wird.
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); begin begin if source is TListbox then begin accept:= true; ListBox1.Items.Move(ListBox1.ItemIndex,ListBox1.ItemAtPos(point(x,y),true)); ListBox1.ItemIndex:= ListBox1.ItemAtPos(point(x,y),true); ListBox2.Items.Move(ListBox2.ItemIndex,ListBox2.ItemAtPos(point(x,y),true)); ListBox2.ItemIndex:= ListBox2.ItemAtPos(point(x,y),true); end else accept:= false; end; end; procedure TForm1.ListBox1Click(Sender: TObject); var i:integer; begin ListBox2.ItemIndex:=-1; i:=ListBox1.ItemIndex; ListBox2.Selected[i]:=true end; |
Re: ListBox Einträge verschieben/kopieren
Denk mal scharf nach: Wenn du sowieso schon eine Schleife hast, ist das mit TProgressbar ein Kinderspiel.
|
Re: ListBox Einträge verschieben/kopieren
Zitat:
Auf jeden Fall danke für den Tipp, schau ich mir mal an. |
Re: ListBox Einträge verschieben/kopieren
hmm, ich bekomm das mit der Progressbar irgendwie nicht hin. Kann mir vllt. jemand erklären wie das genau geht?
Wenn das prog. anfängt zu kopieren, dann muss ich die Progressbar doch in einer anderen Form anzeigen lassen oder? Mit welchem befehl geht das denn genau? Danke! |
Re: ListBox Einträge verschieben/kopieren
Bitte nächstes mal ohne Aufforderung ein neues Thema erstellen, denn das hat mit der Ausgangsfragestellung nicht mehr viel gemeinsam, es sei denn, du passt das erste Thema und den Titel des Themas entsprechend an.
Progressbar initialisieren:
Delphi-Quellcode:
Dann in deiner Schleife:
ProgressBar1.Max := ListBox1.Items.Count;
Delphi-Quellcode:
Je nach Anzahl der Einträge ist es schneller, dies nur alle paar Schleifendurchgänge aufzurufen:
ProgressBar1.Position := i + 1;
Application.ProcessMessages;
Delphi-Quellcode:
Aber nun genug OT!
if i mod 10 = 0 then
begin // wird nur jeden 10. Durchgang aufgerufen end; |
Re: ListBox Einträge verschieben/kopieren - Progressbar
Sry, hab Titel angepasst - denke nicht, dass jetzt ein neuer Thread notwendig ist, da es schon fast klappt. :wink:
Danke für die schnelle Hilfe, funktioniert bei mir nur soweit, dass sich der Balken nach dem Kopiervorgang vollständig auffüllt, aber nicht schrittweise während des Vorgangs... :?: |
Re: ListBox Einträge verschieben/kopieren - Progressbar
Ich habe es nicht getestet, aber es müsste so ungefähr ausschauen. Auf deinen Fehler kann man ohne Code natürlich nicht näher eingehen.
Delphi-Quellcode:
ProgressBar1.Max := ListBox1.Items.Count;
for i := 0 to Listbox1.Items.Count - 1 do begin CopyFile(IncludeTrailingPathDelimiter(ListBox1.Items[i]) + ListBox2.Items[i], ...); ProgressBar1.Position := i + 1; Application.ProcessMessages; // evtl. hast du das vergessen end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 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