Własny Windows Explorer

dział ogólny

Własny Windows Explorer

Nowy postprzez Mironas » piątek, 29 maja 2015, 17:44

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.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Własny Windows Explorer

Nowy postprzez polymorphism » piątek, 29 maja 2015, 18:18

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ą).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Własny Windows Explorer

Nowy postprzez Cyfrowy Baron » środa, 3 czerwca 2015, 15:49

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Własny Windows Explorer

Nowy postprzez Mironas » środa, 3 czerwca 2015, 16:59

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.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Własny Windows Explorer

Nowy postprzez polymorphism » środa, 3 czerwca 2015, 18:20

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ę.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 28 gości

cron