;- TOP
EnableExplicit
;- ● Structure
Structure prog
path.s
name.s
idxImage.i
size.q
*p
EndStructure
;- ● Define
Define ListIcon_ID, hImgList
Define hIcon, i, idx, tmp, tmp$
Define item.LVITEM
Define *p
Define NewList ProgName()
Define NewList prog.prog()
;- List
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files\7-Zip\7zFM.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files\AIMP\AIMP.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files\WinRAR\WinRAR.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Windows\System32\notepad.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Windows\System32\calc.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files\Internet Explorer\iexplore.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files\Everything\Everything.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files\WinMerge\WinMergeU.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files (x86)\K-Lite Codec Pack\MPC-HC64\mpc-hc64.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files (x86)\Resource Hacker\ResourceHacker.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files (x86)\Scanner\Scanner.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files (x86)\HxD\HxD.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files (x86)\QTranslate\QTranslate.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files (x86)\HTML Help Workshop\hhw.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files (x86)\FastStone Image Viewer\FSViewer.exe"
*p = AddElement(prog()) : prog()\p = *p : prog()\path = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
;-┌──GUI──┐
If OpenWindow(0, 0, 0, 300, 350, "Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIcon_ID = ListIconGadget(#PB_Any, 5, 5, 290, 340, "Файлы", 200, #PB_ListIcon_FullRowSelect | #LVS_NOCOLUMNHEADER)
hImgList = ImageList_Create_(32, 32, #ILC_COLOR32 | #ILC_MASK, 1, 1)
SendMessage_(GadgetID(ListIcon_ID), #LVM_SETIMAGELIST, #LVSIL_SMALL, hImgList)
; Добавляем данные
ForEach prog()
Next
i = 0
SendMessage_(GadgetID(ListIcon_ID), #WM_SETREDRAW, 0, 0)
ForEach prog()
If FileSize(prog()\path) > 100
hIcon = 0
ExtractIconEx_(prog()\path, 0, @hIcon, 0, 1)
If hIcon
tmp = ImageList_AddIcon_(hImgList, hIcon)
DestroyIcon_(hIcon) ; Иконку уже в ImageList, оригинал можно удалить
If tmp <> -1
prog()\idxImage = i
item\mask = #LVIF_IMAGE
item\iItem = i
item\iImage = i
tmp$ = GetFilePart(prog()\path, #PB_FileSystem_NoExtension)
AddGadgetItem(ListIcon_ID, i, tmp$)
SendMessage_(GadgetID(ListIcon_ID), #LVM_SETITEM, 0, @item)
SetGadgetItemData(ListIcon_ID, i, prog()\p)
i + 1
EndIf
EndIf
Else
DeleteElement(prog()) ; удалить несуществующий путь из списка
EndIf
Next
SendMessage_(GadgetID(ListIcon_ID), #WM_SETREDRAW, 1, 0)
;-┌──Loop──┐
Repeat
Select WaitWindowEvent()
;- ├ Gadget
Case #PB_Event_Gadget
Select EventGadget()
Case ListIcon_ID
If EventType() = #PB_EventType_LeftClick
idx = GetGadgetState(ListIcon_ID)
If idx <> -1
*p = GetGadgetItemData(ListIcon_ID, idx)
ChangeCurrentElement(prog() , *p)
RunProgram(prog()\path)
EndIf
EndIf
EndSelect
;- ├ Close
Case #PB_Event_CloseWindow
CloseWindow(0)
ImageList_Destroy_(hImgList)
End
EndSelect
ForEver
;-└──Loop──┘
EndIf