Chcę zrobić w TMainMenu by po kliknięciu na jedną z głównych pozycji wyświetlała mi się lista plików z wybranego katalogu.
Jak to wykonać?
Chcę zrobić w TMainMenu by po kliknięciu na jedną z głównych pozycji wyświetlała mi się lista plików z wybranego katalogu.
Jak to wykonać?
W edytorze menu klikamy na pozycję do której chcemy dodawać elementy prawym klawiszem myszy i wybieramy z menu kontekstowego opcję Create Submenu. Następnie utworzonemu pierwszemu elementowi podmenu ustawiamy jakiś Caption. Ważne jest żeby nie został on pusty, bo w przeciwnym wypadku Delphi usunie go automatycznie podczas kompilacji. Dzięki temu będzie możliwe proste dodawanie pozycji do menu. Potem do zdarzenia OnClick dodajemy kod:
var
SR:TSearchRec;
I:Integer;
MenuItem:TMenuItem;
begin
while Menu1.Count>1 do Menu1.Delete(1);
I:=FindFirst('<Folder do przeszukania>\*.*', faAnyFile, SR);
while I=0 do
begin
if SR.Name[1]<>'.' then
begin
MenuItem:=TMenuItem.Create(nil);
MenuItem.Caption:=String(SR.Name);
Menu1.Add(MenuItem);
end;
I:=FindNext(SR);
end;
FindClose(SR);
Menu1.Delete(0);
end;
Oto wyjaśnienie po kolei:
while Menu1.Count>0 do Menu1.Delete(1);
Usuwamy wszystkie poprzednie pozycje z wyjątkiem pierwszej (o indexie 0). Jeżeli nie pozostawimy jednej pozycji to menu nie będzie posiadac zadnych pozycji (subitemów) i nie będzie możliwe ich proste dodawanie.
I:=FindFirst('<Folder do przeszukania>\*.*', faAnyFile, SR);
while I=0 do
begin
if SR.Name[1]<>'.' then
begin
MenuItem:=TMenuItem.Create(nil);
MenuItem.Caption:=String(SR.Name);
Menu1.Add(MenuItem);
end;
I:=FindNext(SR);
end;
FindClose(SR);
Tutaj cała procedura wyszukiwania. Menu1 jest u mnie nazwą menu do którego dodajemy elementy. W miejsce <Folder do przeszukania> wstawiamy oczywiście prawidłową nazwę folderu :-) . Kod
if SR.Name[1]<>'.' then
zapobiega dodawaniu do menu folderów , które znajdowane są w pętli wyszukującej jako '.' i '..' (bieżący i nadrzędny folder).
Linia
Menu1.Delete(0);
usuwa pierwszą pozycję która nie została usunięta na starcie.
Trzeba jeszcze po utworzeniu pozycji dodać kod
MenuItem.OnClick=<nasza procedura obsługi kliknięcia> aby przechwycić kliknięcie na element.