Autor Beitrag
LonghornUser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Fr 10.02.06 21:23 
Hallo,

ich möchte, wie der Titel schon sagt, eine Reihe von Dateien mit Fortschrittsbalken kopieren.
Ich habe 20 Dateien, die in verschiedene Verzeichnisse kopiert werden sollen. Jetzt möchte ich, dass ein Fortschrittsbalken den Gesamtprozess anzeigt. Wie ich das für eine Datei mache, weiß ich bereits (habe einen Tipp bei (glaube) Swissdelphicenter gefunden). Aber wie mache ich es, dass Eine Progressbar den Fortschritt ALLER Dateien anzeigt ? Geht das ? Ich meine, wie in einer normalen Installation.

Danke schonmal.

Ciao LonghornUser
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: Fr 10.02.06 21:29 
Indem du einfach den Progress aller zusammenziehst und dann in dem Fortschrittsbalken anzeigts.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 11.02.06 00:43 
@Danniolo: Solch eine Antwort bringt keinem was. Er wollte es per Shell wissen (soweit ich das bei ihm entnehme) und nicht, wie man's in Delphi löst.

@LHUser: In den ShellOperation-Strukturen werden die Dateinamen der zu bearbeitenden Dateien nullterminiert spezifiziert. Diese API-Funktion ist grundsätzlich dazu gedacht, um mit Listen von Dateien zu arbeiten, weshalb man die Liste mit einem zusätzlichen zweiten #0 abschließen muss.

Dazu kannst Du als Grundlage den Source von DSDT nutzen und musst dabei für ASource und ADest einfach deine jeweils paarweisen Zuordnungen von Quell- und Zieldateinamen angeben:

ausblenden Delphi-Quelltext
1:
CopyFileEx('A.txt'#0'B.txt'#0'C.txt''A.txt.bak'#0'B.txt.bak'#0'C.txt.bak', true);					


Innerhalb des Beispielsources muss lediglich das Flag FOF_SILENT entfernt werden.

HTH.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Mo 13.02.06 16:05 
Alles klar. Jetzt gehts :) Danke !
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Fr 03.03.06 23:04 
Mhm, habe jetzt doch gemerkt. Also die Dateiliste hab ich, aber die Progressbar. Wo wird die denn eingebunden ??
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Fr 03.03.06 23:12 
Oder könnte man die Prozedur
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
Procedure TForm1.CopyFileWithProgressBar(Source, Destination : string);
var
 FromF, ToF : file of byte;
 Buffer : array[0..4096of char;
 NumRead : integer;
 FileLength : longint;
begin
  AssignFile(FromF,Source);
  reset(FromF);
  AssignFile(ToF,Destination);
  rewrite(ToF);
  FileLength:=FileSize(FromF);
  With Progressbar1 do
 begin
  Min := 0;
  Max := FileLength;
  while FileLength > 0 do
  begin
   BlockRead(FromF,Buffer[0],SizeOf(Buffer),NumRead);
   FileLength := FileLength - NumRead;
   BlockWrite(ToF,Buffer[0],NumRead);
   Position := Position + NumRead;
  end;
  CloseFile(FromF);
  CloseFile(ToF);
 end;
end;

eventuell so umschreiben, dass für die "Quelldateien" eine Listbox.Items als parameter übergeben wird und als "ZielDatei" ein Verzeichnis ?
Also so:
ausblenden Quelltext
1:
Procedure TForm1.CopyFileWithProgressBar(SourceFiles:TStrings, DestinationFolder : string);					
fuba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Win7
D7 Ent.
BeitragVerfasst: Mo 24.04.06 19:36 
ich habs so gemacht:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
function PProgressRoutine(TotalFileSize,
                            TotalBytesTransferred,
                            StreamSize,
                            StreamBytesTransferred: LARGE_INTEGER;
                            dwStreamNumber,
                            dwCallbackReason: DWORD;
                            hSourceFile,
                            hDestinationFile: THandle;
                            lpData: Pointer): DWORD; stdcall;
begin
  if dwCallbackReason = CALLBACK_STREAM_SWITCH then
    TProgressBar(lpData).max := TotalFileSize.QuadPart;

  TProgressBar(lpData).Position := TotalBytesTransferred.QuadPart;
  Application.ProcessMessages;
  Result := PROGRESS_CONTINUE;
end;

procedure ListCopyProgress(const Files: TStrings; const aDestDir: string;
                           TotalProgressBar, CurrentProgressBar: TProgressBar);
var
  x, y : integer;
  S: string;
begin
  FCancelled := False;
  x:=Files.Count;
  TotalProgressBar.Min:=0;
  TotalProgressBar.Max:=x;
  S:=ExcludeTrailingPathDelimiter(aDestDir) + '\';
  for y:=0 to x-1 do
  begin
    CopyFileEx(PChar(Files[y]), PChar(S + ExtractFileName(Files[y])),
    @PProgressRoutine, CurrentProgressBar, @FCancelled, 0);
    
    TotalProgressBar.Position:=y+1;
  end;
end;


Moderiert von user profile iconNarses: Komplett-Zitat des letzen Beitrags entfernt
Einloggen, um Attachments anzusehen!
whitef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 202
Erhaltene Danke: 1

Windows X
Delphi XE X
BeitragVerfasst: Mi 15.10.08 18:22 
nettes programm, gibts da auch ne verison in der man ein ordner in die listbox droppen oder öffnen kann, so das der komplette inhalt (+unterordner) verarbeitet wird?