Author: Tomas Rutkauskas
Having the system image list in a TImageList, how can I get the index for special
icons like floppy disk, hard drive, removable drive, etc., which do not represent
file types? I can see that these icons are actually present (for example, 11 =
CD-ROM, 8 = Hard-Drive on my machine ...). But I would prefer not to use hard-coded
constants.
Answer:
1 uses
2 ShellAPI;
3 var
4 sfi: TSHFileInfo;
5 begin
6 SHGetFileInfo("DUMMY.ABC", FILE_ATTRIBUTE_NORMAL, sfi, sizeof(sfi),
7 SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);
8 Index := sfi.iIcon;
9 end;
By using the second parameter you can get icons for file system items that do not
physically exist in the first parameter, which is not completely obvious in the
help for SHGetFileInfo. For example.
10 SHGetFileInfo(" * .DOC", FILE_ATTRIBUTE_NORMAL, sfi, sizeof(sfi),
11 SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);
gets the icon associated with DOC files. To get drives use
12
13 SHGetFileInfo("A: \", FILE_ATTRIBUTE_NORMAL, sfi, sizeof(sfi),
14 SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);
etc.
Note that this retrieves the LARGE icon. See the help on getting small icon with other flags.
|