Du rufst ScanDir ja rekursiv auf. Nun brauchst du der Methode doch nur noch einen zusätzlichen Parameter mitgeben, der die Verzeichnistiefe angibt bzw. gleich den voranzustellenden Text. So ca.:
Delphi-Quellcode:
procedure ScanDir(const APrefix, APath: string);
begin
...
List.Add(APrefix + SR.Name);
...
ScanDir(APrefix + ' ', Directory + SR.Name + '\');
Theoretisch könntest du aus dem Verzeichnis auch direkt die Verzeichnistiefe jedes Mal ermitteln, aber das ist unnötig viel Aufwand.