[Notes2-team] =?iso-8859-1?Q?Substit=F3i_o_q_eu_passei_por_esse_aki=2C_eu_sempre_deixo_?= =?iso-885
Brought to you by:
andersonrb
|
From: Jonas R. S. S. <jon...@bo...> - 2004-04-22 14:21:56
|
procedure BuildFolderTree( var TheFolderTree: PNotesFolderTree; Folder:
string; const Options: TNotesBuildFolderTreeOptions = ftAll; const
ScanSubFolders: Boolean = false; const FolderMask: string = '*'; const
FileMask: string = '*' );
type
PFolderStackItem = ^TFolderStackItem;
TFolderStackItem = record
FolderTree: PNotesFolderTree;
Folder: string;
end;
TFolderStack = array of PFolderStackItem;
var
FolderStack: TFolderStack;
SearchRec: TSearchRec;
CurStack: PFolderStackItem;
SameMask: Boolean;
procedure PushStack( var FT: PNotesFolderTree; const AFolder: string
);
var
FSI: PFolderStackItem;
begin
FSI := AllocMem( SizeOf( TFolderStackItem ) );
if not Assigned( FT ) then
FT := AllocMem( SizeOf( TNotesFolderTree ) );
with FSI^ do begin
FolderTree := FT;
Folder := AFolder;
end;
SetLength( FolderStack, Length( FolderStack ) + 1 );
FolderStack[ High( FolderStack ) ] := FSI;
end;
procedure PopStack;
begin
CurStack := FolderStack[ High( FolderStack ) ];
SetLength( FolderStack, High( FolderStack ) );
end;
begin
TheFolderTree := nil;
SameMask := FolderMask = FileMask;
Folder := AddSlash( Folder );
PushStack( TheFolderTree, Folder );
while Length( FolderStack ) > 0 do begin
PopStack;
if ( Options in [ftAll,ftOnlyFolders] ) and ( FindFirst(
CurStack^.Folder + FolderMask, faAnyFile, SearchRec ) = 0 ) then begin
repeat
if ( SearchRec.Attr and faDirectory <> 0 ) then begin
if( SearchRec.Name[1] <> '.' ) then begin
SetLength( CurStack^.FolderTree^, Length(
CurStack^.FolderTree^ ) + 1 );
with CurStack^.FolderTree^[ High( CurStack^.FolderTree^ ) ]
do begin
Path := SearchRec.Name;
IsFolder := True;
if ScanSubFolders then
PushStack( Items, AddSlash( CurStack^.Folder + Path ) );
end;
end;
end
else if ( Options = ftAll ) and SameMask then begin
SetLength( CurStack^.FolderTree^, Length(
CurStack^.FolderTree^ ) + 1 );
with CurStack^.FolderTree^[ High( CurStack^.FolderTree^ ) ] do
begin
Path := SearchRec.Name;
IsFolder := False;
end;
end;
until FindNext( SearchRec ) <> 0;
SysUtils.FindClose( SearchRec );
end
else if FindFirst( CurStack^.Folder + FileMask, faAnyFile, SearchRec
) = 0 then begin
repeat
if ( SearchRec.Attr and faDirectory <> 0 ) and (
SearchRec.Name[1] <> '.' ) and ScanSubFolders then
PushStack( CurStack^.FolderTree, AddSlash( CurStack^.Folder +
SearchRec.Name ) )
else if SearchRec.Attr and faDirectory = 0 then begin
SetLength( CurStack^.FolderTree^, Length(
CurStack^.FolderTree^ ) + 1 );
with CurStack^.FolderTree^[ High( CurStack^.FolderTree^ ) ] do
begin
Path := SearchRec.Name;
IsFolder := False;
end;
end;
until FindNext( SearchRec ) <> 0;
SysUtils.FindClose( SearchRec );
end;
CurStack^.Folder := '';
FreeMem( CurStack );
end;
end;
huheauehaueahuea, oh o fotolog do tio joninhas ->
http://www.fotolog.net/jonasraoni
Jonas Raoni Soares Silva
------------------------
Delphi & Web Developer
jon...@bo...
|