Am besten durch Verschachtelung der Funktion:
Delphi-Quellcode:
procedure DirTreeToMenu(pfad : String; Parent : TMenuItem);
var
i : integer;
NeuesItem : TMenuItem;
iattr : integer;
sr : TSearchRec;
begin
NeuesItem := TMenuItem.Create(Parent); // Neuen Eintrag mit Pfadnamen erzeugen
Parent.Add(neuesitem);// dem Popup-Menü hinzufügen
NeuesItem.Tag:=0;
NeuesItem.Caption := '"' + pfad + '"' + ' auswählen';
// NeuesItem.Enabled := false;
NeuesItem := TMenuItem.Create(Parent); // Neuen Seperator erzeugen
Parent.Add(neuesitem);// dem Popup-Menü hinzufügen
NeuesItem.Tag:=0;
NeuesItem.Caption := '-';
i:=0;
iattr := fadirectory;
if FindFirst(pfad + '\*.*', iattr, sr) = 0 then
begin
repeat
if (sr.Attr and iAttr) = sr.Attr then
begin
inc(i);
if i > 2 then
begin
NeuesItem := TMenuItem.Create(Parent); // Neuen Eintrag erzeugen
Parent.Add(neuesitem);// dem Popup-Menü hinzufügen
NeuesItem.Tag:=i;
NeuesItem.Caption := sr.Name;
DirTreeToMenu(pfad + '\' + sr.Name, NeuesItem); // Nach Unterordnern suchen
// onclick := PopupMenuItemsClick;
end;
end;
until FindNext(sr) <> 0;
end;
FindClose(sr);
end;
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
PopupMenu:TPopupMenu;
begin
PopupMenu:=TPopupMenu.Create(Self);
DirTreeToMenu('D:\source', PopupMenu.Items); // Suchanfrage starten, ohne * und ohne \ am Ende
Form1.PopupMenu := Popupmenu;
end;