API
21.08.1999
  • Wyświetlanie ikon używanych przez Windows.

       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.

Krok 1: dodaj #include dla pliku SHELLAPI.H

    #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.