Ikony napędów, folderów, dokumentów, eksplorera, otoczenia sieciowego, i tak dalej, są zlokalizowane w systemowej ImageList. Większość ikon rezyduje w SHELL32.DLL, ale inne także są dołączane przez system do ImageList. Aby wyświetlić ikonę używaną przez system, musisz zdobyć uchwyt do systemowej ImageList.
#include <vcl\vcl.h> #pragma hdrstop #include "MAINFORM.h" #include <shellapi.h>Krok 2: funkcja SHGetFileInfo pozwala wyciągnąć systemową ImageList. Dodaj kontrolkę Image i ImageList do głównej formy, ale nie dodawaj do ImageList żadnych ikon. Dodaj ten kod do konstruktora, aby powiązać ImageList z systemową ImageList. // opis argumentów // 1st arg -> "" : nazwa pliku, nie jest konieczna // 2nd arg -> 0 : atrybuty pliku, nie jest konieczny // 3rd arg -> &info : adres struktury SHFILEINFO // 4th arg -> sizeof(info) : zawsze sizeof(SHFILEINFO) // 5th arg -> flags : (zobacz uwagi poniżej) SHFILEINFO info; DWORD ImageHandle = SHGetFileInfo("", 0, &info, sizeof(info), SHGFI_ICON | SHGFI_SHELLICONSIZE | SHGFI_SYSICONINDEX); // jeżeli sukces, to funkcja przypisuje uchwyt do ImageList // TImageList ustawia rozmiar po przypisaniu uchwytu // ShareImages zapobiega skasowaniu systemowej ImageList if (ImageHandle != 0) { ImageList1->Handle = ImageHandle; ImageList1->ShareImages = true; } // wyświetla pierwszą ikonę z listy if(ImageList1->Count > 0) ImageList1->GetIcon(0,Image1->Picture->Icon);Uwaga: wartość zwracana przez SHGetFileInfo nabiera innego znaczenia w zależności od ostatniego argumentu funkcji. Jeżeli zawiera on flagi SHGFI_ICON albo SHGFI_SYSICONINDEX, zwracana wartość jest uchwytem do systemowej ImageList. Oto opisy flag ostatniego argumentu SHGetFileInfo: SHGFI_ICON - mówi, że funkcja zwróci uchwyt do systemowej ImageList. Wypływa również na sposób wypełnienia struktury informacyjnej. SHGFI_SHELLICONSIZE - każe funkcji użyć rozmiaru ikony powłoki /shell/ zamiast rozmiaru ikony systemowej. Pamiętaj, że są cztery klasy ikon w Windows 95/98 - duże systemowe, małe systemowe, oraz duże i małe powłoki. SHGFI_SMALLICON - mówi funkcji, że ta ma zwrócić uchwyt do ImageList małych ikon. Są dwie listy, jedna małych, druga dużych ikon. Duże ikony są zwykle ładniejsze. SHGFI_SYSICONINDEX - określa, że zwracaną wartością będzie uchwyt do systemowej ImageList. Określa także, że info.iIcon będzie zawierał właściwy indeks listy dla nazwy pliku. Będzie to użyte później dla napędów. |