Как писать файлы отдельно от вложенных папок и их файлов в Delphi. Пока они пишутся смешанно по алфавиту

Склеил такой код в Delphi (см. ниже) для создания списка всех файлов и папок, начиная от заданной. Это для медиаплеера - их библиотека сплошной глюк. Проблема: читаются по алфавиту файлы, тут-же вложенные папки с их файлами и потом опять файлы. ВОПРОС: Как сделать сначала все файлы этот папки, а потом все вложенные папки с их файлами?

unit Un1_Direct;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Buttons, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
BitBtn1: TBitBtn;
RichEdit1: TRichEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Var
my_file : textFile;
FileName : string;
F : TextFile;
procedure FindFile(Dir:String);
Var SR : TSearchRec;
FindRes : Integer;
flag : boolean;
begin {procedure TForm1.FindFile(Dir:String);}
Flag:=False; {Обнуляем флаг Что мы зашли в подкаталог и записали его}
{Искать все файлы в директории Dir с расширением *.*,
любые файлы и директории, записать результат в SR }
FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR);
{Пока есть файлы делать}
While FindRes=0 do
begin {While FindRes=0 do}
if ((SR.Attr and faDirectory)=faDirectory) and
((SR.Name='.')or (SR.Name='..')) then
begin
FindRes:=FindNext(SR);
Flag:=true; {Будем писать имя каталога}
Continue;
end;
{если найден каталог, то}
if ((SR.Attr and faDirectory)=faDirectory) then
begin
FindFile(Dir+SR.Name+'\');
{после осмотра вложенного каталога мы продолжаем
поиск в этом каталоге}
FindRes:=FindNext(SR);
{продолжить цикл}
Flag:=true; {Будем писать имя каталога}
Continue;
end;
If Flag Then {Будем писать имя каталога}
Begin
RichEdit1.Lines.Add('==============================');
RichEdit1.Lines.Add(Dir);
RichEdit1.Lines.Add('----------');
WriteLn(F,'==============================');
WriteLn(F,Dir);
WriteLn(F,'----------');
Flag:=false;
End;
RichEdit1.Lines.Add(SR.Name+' --> '+ IntToStr(Round(SR.Size/1000)) ); {Добавляем строчку в редактор}
WriteLn(F,SR.Name+' --> '+ IntToStr(Round(SR.Size/1000))); {Добавляем строчку в файл}
FindRes:=FindNext(SR);
end;{While FindRes=0 do}
FindClose(SR);
end; {procedure TForm1.FindFile(Dir:String);}
{ Созданная нами своя процедура проверки файла }
function FileIsThere(FileName: string): Boolean;
Begin {FileIsThere(FileName: string): Boolean;}
{$I-}
AssignFile(F, FileName);
Rewrite(F);
CloseFile(F);
{$I+}
if Not ((IOResult = 0) and (FileName <> '')) then {Get file name from command line}
MessageDlg('File can not be created!', mtInformation,
[mbOk],0);
End; {FileIsThere(FileName: string): Boolean;}
{НАЧАЛО TForm1.Button4Click(Sender: TObject);}
Begin {procedure TForm1.Button4Click(Sender: TObject);}
FileName:='files.txt';
FileIsThere(FileName);
ReWrite(F);
FindFile(Edit1.Text); // поиск файлов с начальными условиями, заданных в Edit1
CloseFile(F);
end; {procedure TForm1.Button4Click(Sender: TObject);}
end. {UNIT}

Сначала составляй список директорий, потом список файлов. Затем просто соединяешь. Это же так элементарно.
А код в след. раз лучше копипастить на какой-нибдь специальный ресурс, к примеру, pastebin точка ком. Там хоть подсветка синтаксиса есть.