2009. május 17., vasárnap
Retrieve icons from the system image list
Problem/Question/Abstract:
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:
uses
ShellAPI;
var
sfi: TSHFileInfo;
begin
SHGetFileInfo("DUMMY.ABC", FILE_ATTRIBUTE_NORMAL, sfi, sizeof(sfi),
SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);
Index := sfi.iIcon;
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.
SHGetFileInfo(" * .DOC", FILE_ATTRIBUTE_NORMAL, sfi, sizeof(sfi),
SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);
gets the icon associated with DOC files. To get drives use
SHGetFileInfo("A: \", FILE_ATTRIBUTE_NORMAL, sfi, sizeof(sfi),
SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);
etc.
Note that this retrieves the LARGE icon. See the help on getting small icon with other flags.
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése