После некоторых изысканий удалось получить следующее:
Код:
procedure SearchDirectory(MainMenu: TMainMenu; MenuItem: TMenuItem; Level: Int32;
Directory: String);
var
SubMenuItem: TMenuItem;
SearchRec: TSearchRec;
begin
if FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0 then
Repeat
if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') and
((SearchRec.Attr and faDirectory) = faDirectory) then
begin
if Level = 0 then
begin
MenuItem := TMenuItem.Create(MainMenu);
MenuItem.Caption := SearchRec.Name;
MainMenu.Items[0].Add(MenuItem);
SearchDirectory(MainMenu, MenuItem, Level + 1,
Directory + SearchRec.Name + '\')
end
else
begin
SubMenuItem := TMenuItem.Create(MainMenu);
SubMenuItem.Caption := SearchRec.Name;
MenuItem.Insert(0, SubMenuItem);
SearchDirectory(MainMenu, SubMenuItem, Level + 1,
Directory + SearchRec.Name + '\')
end;
end;
Until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
Может можно это как-то оптимизировать?