С простыми кассами я разобрался.
Ради поисков создал класс:
- Код: Выделить всё
TDirectory = Class
private
FBasePath: String;
FFileMask: String;
FFileList: TStringList;
// FFileActions: Какой-то ТИП нужно придумать...;
protected
procedure DoScanDir(ABasePath: String; Recurse: Boolean;Var AFileList: TStringlist;aMask: string);
public
Constructor Create(FullPath: String; FMask: String ='*');
published
property BasePath: String Read FBasePath;
property FileMask: String Read FFileMask;
property FileList: TStringList Read FFileList;
end;
procedure TDirectory.DoScanDir(ABasePath: String; Recurse: Boolean;var AFileList: TStringlist;aMask: string);
Var
Info : TSearchRec;
begin
If FindFirstUTF8(ABasePath+amask,faAnyFile and not faDirectory,Info)=0 then
try
repeat
AFileList.Append(info.Name);
until (FindNextUTF8(Info)<>0);
finally
FindCloseUTF8(Info);
end;
If Recurse then
If FindFirstUTF8(ABasePath+amask,faDirectory,Info)=0 then
try
repeat
If (Info.Attr=faDirectory) and
Not ((info.Name='.') or (Info.Name='..')) then
DoScanDir(ABasePath+Info.Name,Recurse,AFileList,AMask);
until (FindNextUTF8(Info)<>0);
finally
FindCloseUTF8(Info);
end;
end;
Constructor TDirectory.Create(FullPath: String;FMask: String ='*');
begin
if (fullpath<>'') and (DirectoryExists(FullPath)) then
Begin
FBasePath:=ExtractFilePath(FullPath);
FFileMask:=FMask;
FFileList:=TStringList.Create;
DoScanDir(FullPAth,false,FFileList,Fmask);
end;
end;
Вот дальше у меня реальный затык.
По мутной идее в моей голове. Мутной, мутной, слегка осязаемой. Поле
"FFileActions" должно быть индексированным списком или массивом записей.
Повнимательнее глянул на
TStringList и его поле
FList: PStringItemList;- Код: Выделить всё
PStringItem = ^TStringItem;
TStringItem = record
FString: string;
FObject: TObject;
end;
PStringItemList = ^TStringItemList;
TStringItemList = array[0..MaxListSize] of TStringItem;
То есть,
StringItem может содержать в одной записи текстовую метку(Имя-описание) и некий объект, вернее ссылку на него?
Если так то, наверно, можно получить аналог записи в таблице представленной выше.
- Код: Выделить всё
TStringItem = record
FString: string;// 'Копировать'
FObject: TObject; //ссылка на процедуру-функцию или, в случае внешней команды, ссылку на строку, параметры командной строки внешнего исполняемого файла. Например консольного архиватора.
end;
Понимаю, что все сказанное мной, очень сумбурно.
Похоже. я нашел что-то похожее на то что мне нужно. По крайней мере повилось какое то понимание возможного использования
http://www.sql.ru/forum/1005683/sozdanie-spiska-procedur-cherez-tstringlist-addobject