Page 1 of 1

Virtual ListIcon Step Forward [Windows]

Posted: Thu Sep 01, 2011 12:32 pm
by RASHAD
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


Re: Virtual ListIcon Step Forward [Windows]

Posted: Fri Sep 02, 2011 11:53 am
by Kwai chang caine
Thanks RASHAD 8)