Wyciagniecie ikon skojarzonych z rozszerzeniem

0

Witam!

Na wstepie powiem ze szukalem rozwiazania problemu w postach ale nie znalazlem pelnego rozwiazania... :(

Chodzi mi o cos takiego:

Chcialbym w komponencie ListView wyswietlic razem z nazwami plikow ikony odpowiadajace ich rozszerzeniom. Chodzi mi o ikony skojarzone standardowo przez windows z danym rozszerzeniem pliku. Znalazlem kilka funkcji jednak one wyciagaja ikonke na podstawie pelnej sciezki do pliku. Ja dysponuje jedynie rozszerzeniem. Jak zrobic cos takiego.
W delphi jestem raczej poczatkujacy wiec prosilbym o dokladny opis lub jakas procedurke.

0

mam wyjatkowo durne rozwiazanie - nadaje sie tylko w calkowitej desperacji. mozesz uzyc funkcji szukajacych pliku na dysku zeby uzyskac pelna sciezke do plikow o konkretnym rozszerzeniu i jak jakis znajdziesz - wyciagnac dla niego ikonke.

0

Możesz otworzyć w rejestrze klucz HKEY_CLASSES_ROOT.rozszerzenie, odczytać wartość domyślną, a potem otworzyć klucz HKEY_CLASSES_ROOT\odczytana_wartość\DefaultIcon i znowu odczytać domyślną wartość, która będzie ścieżką do pliku ikony lub ścieżką do pliku binarnego oraz indeksem do jego zasobu.

0

Miałem ten problem, jak pisałem w Assemblerze rozwalacza haseł do RARa. Potrzebowałem pobrać ikonki do spisu plików w archiwum. Ponieważ nie istniały one na dysku, to funkcja SHGetFileInfo nie działała. Podpatrzyłem jak to robi WinRAR - rzeczywiście dla każdego typu pobiera raz ikonę z rejestru. Jednak takie rozwiązanie jest dosyć żmudne do wykonania, więc poszedłem inną drogą. Tworzę na dysku plik o danym rozszerzeniu i podają go jako parametr do wyżej wspomnianej funkcji. Zmieniam rozszerzenie i znów odpalam funkcję. Na końcu kasuję plik. Jedynie dodałem przy tworzeniu tego pliku flagę FILE_ATTRIBUTE_TEMPORARY myśląc, że być może operacje będą szybsze, aczkolwiek nie wiem, czy nie jest ona zbędna.

[<font color="blue">dopisane</span>]
Przykładu wklejać nie będę, bo wszystko mam w Asm32 + WinAPI :d.

0

W takim razie drugie pytanko:

Jak tworzyc plik o danym rozszerzeniu i nastepnie go kasowac?
Jak juz pisalem jestem poczatkujacy w Delphi wiec przepraszam jesli pytanie jest trywialne ;)

0
var f:file;

// tworzenie pustego pliku
assignfile(f,'dysk:\scieżka\nazwapliku.roz'); // assign dla tp
rewrite(f,1); // stworzenie i otwarcie pliku
// ta jedynka raczej powinna być, zresztą poczytaj w helpie o rewrite
closefile(f); // zamknięcie pliku ; close() dla tp

// kasowanie:
assignfile(f,'drive:\path\filename.ext');
erase(f);
// plik musi być zamknięty

Zanim zaczniesz 'obrabiać' plik przy pomocy zmiennej typu file (text, textfile, file of costam), zawsze trzeba przypisać zmienną do pliku przy pomocy assign (dla pascala) lub assignfile (dla delfina). Przy assign/assignfile nie trzeba uzywać pełnej nazwy łącznie z nazwą dysku i ścieżką dostępu. Wystarczy sama nazwa z roszerzeniem. Wtedy plik zostanie utworzony w difoltowej bibliotece na difoltowym dysku. Closefile to dla delfina, a close dla pascala.

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