Strona 1 z 1

Własny Windows Explorer

Nowy postNapisane: piątek, 29 maja 2015, 17:44
przez Mironas
W RAD Studio ewidentnie brakuje dwóch komponentów:
TreeView połączony z funkcją wyświetlania struktury katalogów i ich ikon,
ListView z funkcją wyświetlania plików w różnych widokach (miniatury, kafelki, ...).
"Staroświeckie" komponenty DirectoryListBox i FileListBox są mocno ograniczone i nie załatwiają sprawy.

Oczywiście te funkcjonalności można zbudować na bazie zwykłych TreeView/ListView ale jest to dość skomplikowane i problematyczne. Szczególnie jeśli chciałbym w ListView zrobić podgląd miniatur plików graficznych. W oknie Explorera Windows takie miniatury wyświetlane są bardzo szybko. Przy otwarciu katalogu (w widoku miniatur) tworzony jest w plik Thumbs.db (przynajmniej pod WinXP) w którym zapisywane są miniatury w celu ich szybszego wyświetlania przy ponownym otwarciu katalogu.

I tutaj mam następujące pytania:
1. Czy da się wykorzystać w swoim oknie systemowe kontrolki do wyświetlania katalogów i plików wraz z ich pełną funkcjonalnością?
2. Czy da się w możliwie prosty sposób wykorzystać ListView do wyświetlania miniatur z użyciem systemowego mechanizmu ich generowania (Thumbs.db)?

A jeśli NIE, to jak najczęściej sobie radzicie jeśli w programie musicie wyświetlić strukturę katalogów i plików?

Wyjaśniam, że nie chodzi mi o wykorzystanie okien dialogowych (jak np SHBrowseForFolder) tylko o umieszczenie na własnej formie drzewka katalogów i listy plików. Tak jakbym chciał przykładowo zrobić własny WindowsExplorer taki jak systemowy.

Re: Własny Windows Explorer

Nowy postNapisane: piątek, 29 maja 2015, 18:18
przez polymorphism
Jeśli chodzi o zawartość katalogu, to poczytaj sobie o interfejsie IShellForder. Z niego możesz wyciągnąć obiekt widoku IShellView. Jeśli chodzi o drzewo, to za czasów, kiedy sam próbowałem znaleźć rozwiązanie systemowe, nie było nic udokumentowanego oficjalnie (czasy WinXP). Może od tamtej pory pojawiło się coś w dokumentacji na ten temat. Z drugiej strony można sobie samemu napisać kontrolkę z wykorzystaniem wspomnianego IShellForder (chyba nawet kiedyś pisałem taką).

Re: Własny Windows Explorer

Nowy postNapisane: środa, 3 czerwca 2015, 15:49
przez Cyfrowy Baron
Mironas napisał(a):W RAD Studio ewidentnie brakuje dwóch komponentów:
TreeView połączony z funkcją wyświetlania struktury katalogów i ich ikon,
ListView z funkcją wyświetlania plików w różnych widokach (miniatury, kafelki, ...).


TTreeView jest na zakładce Win32 a obsługę struktury katalogów i ich ikon można oprogramować bez problemu. To samo zresztą tyczy się TListView - akurat ten komponent to sobie sam kiedyś oprogramowałem w ten sposób.

Re: Własny Windows Explorer

Nowy postNapisane: środa, 3 czerwca 2015, 16:59
przez Mironas
Wczytanie drzewka katalogów do TreeView razem z wlaściwymi ikonami wcale nie jest takie proste. Oczywiście, jak raz się to zrobi (ja zrobiłem) to się już ma gotowca. Ale nigdy nie wiadomo czy bezbłędnie zadziała w nietypowych sytuacjach (katalogi sieciowe itp).
Jeszcze gorzej jest z wyświetlaniem plików graficznych w ListView w widoku miniatur. Trzeba na piechotę wczytać każdy plik i zrobić z niego miniaturę. Dlatego pytałem się jak wyciągnąć miniatury z systemowego pliku Thumbs.db (pod WinXP i wyżej) i ewentualnie jak wymusić na Windowsie wygenerowanie takiego pliku dla grafik w wybranym katalogu.

Nadal dziwi mnie jednak że ani Borland ani Embarcadero nie dodali odmiany tych komponentów z gotową funkcjonalnością wyświetlania katalogów i plików.

Re: Własny Windows Explorer

Nowy postNapisane: środa, 3 czerwca 2015, 18:20
przez polymorphism
Ale nigdy nie wiadomo czy bezbłędnie zadziała w nietypowych sytuacjach (katalogi sieciowe itp).

Z IShellFolder będzie tak jak jest w exploratorze, z tym raczej problemów nie było.

Co do ikon i miniatur: myślę, że interfejsy IExtractIcon i IExtractImage powinny załatwić sprawę.