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