Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1077 → Rev 1078

/Delphi/akMediaAdmin/Source/LoadUnit.pas
0,0 → 1,117
// akMediaAdmin v. 1.1
// Copyright (c) 1999-2000 Anatoli Klassen
 
unit LoadUnit;
 
interface
 
uses
Classes;
 
type
TLoadThread = class(TThread)
private
FSource : TStringList;
FResult : TStringList;
FCurrent : longint;
FTotal : longint;
procedure Load(const FileName : string);
procedure ShowState;
protected
procedure Execute; override;
public
property Result : TStringList read FResult;
constructor Create(List : TStrings);
destructor Destroy; override;
end;
 
implementation
 
uses UtilsUnit, SysUtils, FileCtrl, WaitUnit;
 
procedure TLoadThread.Load(const FileName : string);
var
S : TStringList;
i, p : longint;
st : string;
FI : TFileInfo;
SR : TSearchRec;
 
begin
if DirectoryExists(FileName) then begin
if FindFirst(AddSlash(FileName)+'*.*', faAnyFile, SR) = 0 then begin
while FindNext(SR) = 0 do
if SR.Name[1] <> '.' then // skip parent and directory itself
Load(AddSlash(FileName)+SR.Name); // recurcive call of the procedure
// for nested directories
FindClose(SR);
end;
end
else if UpperCase(ExtractFileExt(FileName)) = '.PLT' then begin
S := TStringList.Create;
try
S.LoadFromFile(FileName);
except
S.Clear;
end;
 
for i := 0 to S.Count - 1 do begin // Split file's names and captions
st := S[i];
Delete(st, 1, Pos('=', st));
p := Pos(#9, st);
if p = 0 then p := Pos(#8, st);
FI := TFileInfo.Create(Copy(st, 1, p - 1),
Copy(st, p + 1, Length(st) - p));
FResult.AddObject(FI.Name, FI);
end;
 
S.Free;
end
else begin
FI := TFileInfo.Create(FileName, '');
FResult.AddObject(FI.Name, FI);
end;
end;
 
constructor TLoadThread.Create(List : TStrings);
begin
FSource := TStringList.Create;
FSource.AddStrings(List);
 
FResult := TStringList.Create;
inherited Create(False);
end;
 
destructor TLoadThread.Destroy;
begin
FSource.Free;
FResult.Free;
inherited Destroy;
end;
 
procedure TLoadThread.Execute;
var
i : longint;
 
begin
FResult.BeginUpdate;
 
FTotal := FSource.Count;
for i := 0 to FSource.Count-1 do
if Terminated then
Break
else begin
FCurrent := i+1;
Synchronize(ShowState);
Load(FSource[i]);
end;
 
FResult.EndUpdate;
end;
 
procedure TLoadThread.ShowState;
begin
WaitForm.ShowState(FCurrent, FTotal);
end;
 
end.