Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   ListBox Einträge verschieben/kopieren - Progressbar (https://www.delphipraxis.net/92006-listbox-eintraege-verschieben-kopieren-progressbar.html)

Sh4d0w 13. Mai 2007 09:55


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

Sh4d0w 13. Mai 2007 10:13

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?

Matze 13. Mai 2007 10:24

Re: ListBox Einträge verschieben/kopieren
 
Das geht mit einer Schleife und Delphi-Referenz durchsuchenCopyFile:

Delphi-Quellcode:
for i := 0 to Listbox1.Items.Count - 1 do
  CopyFile(IncludeTrailingPathDelimiter(ListBox1.Items[i]) + ListBox2.Items[i]);
Schöner wäre es jedoch, wenn du die Pfade intern speicherst und damit arbeitest (Bsp: TStringList).
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.

Sh4d0w 13. Mai 2007 10:31

Re: ListBox Einträge verschieben/kopieren
 
Danke, hab das nun auch hinbekommen!

Meine Lösung zum ersten Problem:

Delphi-Quellcode:
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;
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.

Apollonius 13. Mai 2007 10:39

Re: ListBox Einträge verschieben/kopieren
 
Denk mal scharf nach: Wenn du sowieso schon eine Schleife hast, ist das mit TProgressbar ein Kinderspiel.

Sh4d0w 13. Mai 2007 10:40

Re: ListBox Einträge verschieben/kopieren
 
Zitat:

Zitat von Apollonius
Denk mal scharf nach: Wenn du sowieso schon eine Schleife hast, ist das mit TProgressbar ein Kinderspiel.

Hab nicht soviel programmiert und auch bisher nie was davon gehört. ;)
Auf jeden Fall danke für den Tipp, schau ich mir mal an.

Sh4d0w 13. Mai 2007 11:50

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!

Matze 13. Mai 2007 12:01

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:
ProgressBar1.Max := ListBox1.Items.Count;
Dann in deiner Schleife:

Delphi-Quellcode:
ProgressBar1.Position := i + 1;
Application.ProcessMessages;
Je nach Anzahl der Einträge ist es schneller, dies nur alle paar Schleifendurchgänge aufzurufen:

Delphi-Quellcode:
if i mod 10 = 0 then
begin
  // wird nur jeden 10. Durchgang aufgerufen
end;
Aber nun genug OT!

Sh4d0w 13. Mai 2007 12:20

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... :?:

Matze 13. Mai 2007 12:23

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:58 Uhr.
Seite 1 von 2  1 2      

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