Virtual ListIcon Step Forward [Windows]
Posted: Thu Sep 01, 2011 12:32 pm
Hi
Code: Select all
#LVN_ODCACHEHINT = #LVN_FIRST - 13
#SHGFI_ADDOVERLAYS = $20
Declare WinCallback(hwnd, msg, wParam, lParam)
If OpenWindow(0, 0, 0, 640, 310, "ExplorerListGadget Demo", #PB_Window_SizeGadget|#PB_Window_SystemMenu | #PB_Window_MaximizeGadget| #PB_Window_ScreenCentered)
hwnd = ListIconGadget(0,10,10,620,250,"Name",240,#LVS_OWNERDATA|#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
AddGadgetColumn(0,1,"Size",100)
AddGadgetColumn(0,2,"Format Type",150)
AddGadgetColumn(0,3,"Date Modified",100)
SetGadgetColor(0,#PB_Gadget_BackColor,$FEF4DA)
SetGadgetColor(0,#PB_Gadget_FrontColor,$000000)
SetGadgetColor(0,#PB_Gadget_LineColor,$A9A9A9)
Frame3DGadget(1, 10, 265, 200, 40, "Enter Path to Explore :")
StringGadget(2, 15, 280,190, 20, "")
ButtonGadget(3, 220,270, 40, 35,"Enter")
SetWindowCallback(@WinCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 3
ClearGadgetItems(0)
If hLimage
ImageList_Remove_(hLimage,-1)
EndIf
Path$ = GetGadgetText(2)
If Right(Path$, 1) <> "\"
Path$ = Path$ + "\"
EndIf
If ExamineDirectory(0, Path$, "*.*")
hLimage = ImageList_Create_(16, 16, #ILC_MASK | #ILC_COLOR32, 0, 0)
SendMessage_(GadgetID(0), #LVM_SETIMAGELIST, #LVSIL_SMALL, hLimage)
ExamineDirectory(0, Path$, "*.*")
Count = 0
While NextDirectoryEntry(0)
Count + 1
Wend
FinishDirectory(0)
Global Dim myItems.s(Count,3)
Global Dim myicons.l(Count)
SendMessage_(GadgetID(0), #LVM_SETITEMCOUNT, Count,1 )
ExamineDirectory(0, Path$, "*.*")
i = 0
inf.SHFILEINFO
While NextDirectoryEntry(0)
Name$ = DirectoryEntryName(0)
SHGetFileInfo_(Path$ + Name$, 0, @inf, SizeOf(inf),#SHGFI_ICON |#SHGFI_TYPENAME )
IcoIndex = ImageList_AddIcon_(hLimage, inf\hIcon)
DestroyIcon_(inf\hIcon)
myIcons(i) = IcoIndex
myItems(i,0) = " " + Name$
myItems(i,1) = Str(DirectoryEntrySize(0))
myItems(i,2) = PeekS(@inf\szTypeName )
myItems(i,3) = FormatDate("%dd - %mm - %yyyy", DirectoryEntryDate(0, #PB_Date_Modified))
i + 1
Wend
FinishDirectory(0)
Else
Result = MessageRequester("Error","Your Path Not Found,Try Again ?",#PB_MessageRequester_YesNo)
If Result = #PB_MessageRequester_No
End
Else
SetGadgetText(2,"")
SetActiveGadget(2)
EndIf
EndIf
EndSelect
EndSelect
Until Quit = 1
EndIf
Procedure WinCallback(hwnd, msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_NOTIFY
*pnmh.NMHDR = lParam;
Select *pnmh\code
Case #LVN_ODCACHEHINT
result = 0
Case #LVN_GETDISPINFO
*pnmlvdi.NMLVDISPINFO = lParam
If *pnmlvdi\item\mask & #LVIF_IMAGE|#LVIF_TEXT
*pnmlvdi\item\iImage = myIcons(*pnmlvdi\item\iItem) ; index of icon in the list
*pnmlvdi\item\pszText = @myItems(*pnmlvdi\item\iItem,*pnmlvdi\item\iSubItem) ; text to set
EndIf
Case #LVN_ODFINDITEM
result = -1
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
; FILE_ATTRIBUTE_ARCHIVE = $20
; FILE_ATTRIBUTE_COMPRESSED = $800
; FILE_ATTRIBUTE_DEVICE = $40
; FILE_ATTRIBUTE_DIRECTORY = $10
; FILE_ATTRIBUTE_ENCRYPTED = $4000
; FILE_ATTRIBUTE_HIDDEN = $2
; FILE_ATTRIBUTE_NORMAL = $80
; FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $2000
; FILE_ATTRIBUTE_OFFLINE = $1000
; FILE_ATTRIBUTE_READONLY = $1
; FILE_ATTRIBUTE_REPARSE_POINT = $400
; FILE_ATTRIBUTE_SPARSE_FILE = $200
; FILE_ATTRIBUTE_SYSTEM = $4
; FILE_ATTRIBUTE_TEMPORARY = $100
; FILE_ATTRIBUTE_VIRTUAL = $10000
;
; SHGFI_ADDOVERLAYS = $20
; SHGFI_ATTR_SPECIFIED = $20000
; SHGFI_ATTRIBUTES = $800
; SHGFI_DISPLAYNAME = $200
; SHGFI_EXETYPE = $2000
; SHGFI_ICON = $100
; SHGFI_ICONLOCATION = $1000
; SHGFI_LARGEICON = $0
; SHGFI_LINKOVERLAY = $8000
; SHGFI_OPENICON = $2
; SHGFI_OVERLAYINDEX = $40
; SHGFI_PIDL = $8UI
; SHGFI_SELECTED = $10000