Code
Structure Info
Part.s ; Расширение файла
IconID.l ; Идентификатор иконки, связанной с расширением
EndStructure
Global NewList Part_IconID.Info()
AddElement(Part_IconID() )
Procedure.s GetSysDirectory() ; Путь к системной папке
Path.s=Space(500)
GetSystemDirectory_(@Path,500)
ProcedureReturn Path
EndProcedure
Part_IconID()\Part="dir" ; Это иконка папки
Part_IconID()\IconID=ExtractIcon_(0,GetSysDirectory()+"\SHELL32.dll",3)
Procedure GetExtension_Icon(Extension.s, size.l)
Protected Info.SHFILEINFO, StandardIcon.l, flags.l
StandardIcon = 0
If Size = 0
flags = #SHGFI_USEFILEATTRIBUTES | #SHGFI_ICON | #SHGFI_SMALLICON
Else
flags = #SHGFI_USEFILEATTRIBUTES | #SHGFI_ICON | #SHGFI_LARGEICON
EndIf
If SHGetFileInfo_("." + extension, #FILE_ATTRIBUTE_NORMAL, @Info.SHFILEINFO, SizeOf(SHFILEINFO), flags)
StandardIcon = Info\hIcon
Else
If Size = 0
ExtractIconEx_("shell32.dll", 0, 0, @StandardIcon, 1)
Else
ExtractIconEx_("shell32.dll", 0, @StandardIcon, 0, 1)
EndIf
EndIf
ProcedureReturn StandardIcon
EndProcedure
Procedure GetIcon(Part.s)
Shared Part_IconID()
Part=LCase(Part)
ForEach Part_IconID()
If Part=Part_IconID()\Part ; Данные о расширенни найдены
ProcedureReturn Part_IconID()\IconID
EndIf
Next
; Данных о расширении нет, поэтому загружаем иконку
IconID=GetExtension_Icon(Part, 0)
AddElement(Part_IconID() )
Part_IconID()\Part=Part
Part_IconID()\IconID=IconID
ProcedureReturn IconID
EndProcedure
If OpenWindow(0, 100, 100, 300, 140, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 5, 5, 290, 130, "Name", 100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetItem(0, -1, "Папка", GetIcon("dir") )
AddGadgetItem(0, -1, "rar", GetIcon("rar") )
AddGadgetItem(0, -1, "txt", GetIcon("txt") )
AddGadgetItem(0, -1, "pb", GetIcon("pb") )
AddGadgetItem(0, -1, "картинка", GetIcon("jpg") )
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf