lista podkatalogów -złożony problem

0

Witam!
Pytanko dotyczy listy katalogów.
Na formie mam FileListBox w którym ma być wyświetlana zawartość katalogu.
Problem dotyczy tego, że do obsługi programy będzie użytych tylko kilka klawiszy,
jak wyświetlić listę katalogów (np. listbox) z danej lokacji 'd:' tak aby po podświetleniu katalogu uzyskać liste plików w FileListBox.

Może jaśniej:

do przewijania listy katalogów będą użyte tylko klawisze strzalek góra i dół a do ptrzewijania listy plików tylko strzałki lewo i prawo,
i przy okazji jak przypisać wyżej wymienione sterowanie

Ale namieszałem :-) pomóżcie proszę bo drąże już ten temat na różne sposoby

pozdrawiam

0

Nie wiem czy o to Ci chodzi ale możesz to zrobić tak:
FileListBox1.Directory:='D:'; // katalog

0

Zupełnie nie zrozumiałem Twojego posta, ale chyba wiem, o co Ci chodzi.

Posłuż się dodatkowo(poza FileListBox) dwoma komponentami: DirectoryListBox i DriveComboBox. Odpowiednio je ze sobą połącz(każdy z nich ma jakąś taką śmieszną właściwość w Object Inspektorze jest na czerwono) i wsio.

Teraz jak wybierzesz dysk w driveComboBox, to w DirectoryListBox pokaże Ci się lista folderów, a w FileListBox lista pików.
Jak teraz otworzysz jakiś folder w dirListBox, to w FileListBox pokaże Ci się lista plików z niego.

0

no ja wiem ale chodzi o to że to program do szafy grącej i muszę użyć tylko dwa komponenty: 1 do wyboru płyty a 2 do wyboru utworu.
w 1 tylko lista katalogów z mp3 a po podswietleniu katalogu w drugim lista utworów, żeby było ciekawiej to przewijanie list tylko za pomocą klawiszy strzałek (po dwie na jeden komponent).
No może teraz ciut rozjaśniłem złożoność problemu :)

0
d.grzes napisał(a)

no ja wiem ale chodzi o to że to program do szafy grącej i muszę użyć tylko dwa komponenty: 1 do wyboru płyty a 2 do wyboru utworu.
w 1 tylko lista katalogów z mp3 a po podswietleniu katalogu w drugim lista utworów, żeby było ciekawiej to przewijanie list tylko za pomocą klawiszy strzałek (po dwie na jeden komponent).
No może teraz ciut rozjaśniłem złożoność problemu :)

No to dajesz DirectoryListBox i FileListBox. W DirectoryListBox masz widoczne katalogi(czyli te płyty), a po podświetleniu pojawia Ci się jego zawartość w FileListBox.

Tyle, że:
Musisz je ze sobą połączyć.
Jeżeli chodzi o strzałki, to nie ma z tym problemu, bo obydwa komponenty mają wbudowaną obsługę strzałek. Czyli wystarczy, że DirectoryListBox np. będzie miało Focus i wtedy normalnie możesz operować strzałkami. Mało tego. Jeśli operujesz strzałkami, to ponadto wywołują one onClick, czyli pokazują zawartość katalogu w FileListBox.

0

co do podświetlania to nadal nie działa :(

a jak przypisać strzałki góra, dół do DirectoryListBox a strzałki lewo, prawo do FileListBox?
chodzi mi o przewijanie

0

kiszka
walczę z tym ale efektów brak
proszę o wszelką pomoc

pozdrawiam
Grzegorz

0
d.grzes napisał(a)

a jak przypisać strzałki góra, dół do DirectoryListBox a strzałki lewo, prawo do FileListBox?
chodzi mi o przewijanie

Moim zdaniem powinieneś dać właściwość keyPreview formy na true. Potem w onKeyDown formy sprawdzasz, który kursor został wciśnięty i odpowiednio reagujesz.

0

mam ustawiony KeyPreview i już powoli rozwiązuję co ma być w zdarzeniu :).
nie wiem jak zrobić żeby wyświetlić pliki w FileListBox już po podświetleniu katalogu w DirectoryListBox (bez wchodzenia w katalog).
Chodzi mi o coś takiego jak w ShellTreeView, w sumie to mogę użyć też ShellListView tylko że tu z kolei nie wiem jak zrobić maskę by wyświetlić tylko pliki np *.mp3.
Da się coś takiego zrobić?

0
FileListBox1.Directory:=DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex);
0

FileListBox1.Directory:=DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex);

Trochę dziwnie się to zachowuje, jeśli dam to w OnKeyDown to da sie zejść tylko o jedną pozycję w drzewie.
Chodzi mi o to żeby można było się swobodnie poruszać w DirectoryListBox tylko przy pomocy strzałek lewo, prawo otrzymując listę plików (FileListBox) w podświetlonym katalogu. Poruszanie po FileList Box to tylko strzałki góra, dół.
Piszę program do szafy grającej stąd tak skompa możliwość kontroli.
Tylko to mnie blokuje, bardzo proszę o pomoc :)
pzdr

0

Skoro ustawiasz na głównej formie KeyPreview:=True a po plikach i katalogach poruszasz się tylko strzałkami to ustaw w DirectoryListBox i FileListBox właściwość Enabled na False, całą obsługę zrób w OnKeyDown i po kłopocie.

0

nie bardzo wiem o co Ci chodzi bo jak dam Enabled:=False to nie da rady się po nich poruszać no chyba że bede robil Enabled:=True pod przyciskiem.
Tylko że chcę żeby to się płynnie zmieniało więc odpada Enabled:=False dla FileListBox.

Jeśli możesz to daj mi jakiś przykład bo nie mogę tego skumać, co tu dużo gadać początkujący jestem :)

0

Dla formy ustaw KeyPreview na True. Dla DirectoryListBox i FileListBox Enabled na False. Poruszanie po tych komponentach rozwiąże procedura obsługi zdarzenia OnKeyDown dla Formy.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case Key of
    13: DirectoryListBox1.OpenCurrent;
    37: if FileListBox1.ItemIndex>0 then
            FileListBox1.ItemIndex:=FileListBox1.ItemIndex-1;
    38: if DirectoryListBox1.ItemIndex>0 then
            DirectoryListBox1.ItemIndex:=DirectoryListBox1.ItemIndex-1;
    39: if FileListBox1.ItemIndex<FileListBox1.Count-1 then
            FileListBox1.ItemIndex:=FileListBox1.ItemIndex+1;
    40: if DirectoryListBox1.ItemIndex<DirectoryListBox1.Count-1 then
            DirectoryListBox1.ItemIndex:=DirectoryListBox1.ItemIndex+1;
  end;
  FileListBox1.Directory:=DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex);
end;
0

i o to chodziło,

wielkie dzięki :)

pozdrawiam

0

jeszcze pytanko: jak zamienić by klawisz enter nie pwodował wchodzenia w drzewo katalogów. Przy jego pomocy chcę dodawać plik zaznaczony w FileListBox do playlisty

0

Zdecyduj, który klawisz ma służyć do wchodzenia do katalogów i w instrukcji case zamiast 13 użyj kodu tego klawisza.
Jeśli nie chcesz w ogóle wchodzić do katalogów to całkowicie wyrzuć tę linię.
Żeby uzyskać kody klawiszy możesz wrzucić na formę Label i na samym końcu procedury OnKeyDown napisać:
Label1.Caption:=IntToStr(Key);

0

Nie chce wchodzic do katalogów, wystarczy ich podświetlanie.
Chce natomiast żeby naciśnięcie klawisza Enter nie powodowało weścia w podświetlony katalog w DirectoryListBox ale coś takiego: ListBox1.Items.Add(ExtractFileName(FileListBox1.FileName));
to dodaje piosenkę do playlisty

dzieki za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1