| 
       
  | 
   
      ![]()  | 
      
       | 
   ||
| 
       | 
      |||
         
  | 
   ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
       
 | 
   ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
          
  | 
      ||
| Visual Basic Common
         Control API Routines SHGetFileInfo: ListView Demo 3 - Adding Sorting Functionality Third of four pages to create a ListView application to retrieve files from a specified folder.  | 
   ||
| Posted: | Sunday March 1, 1997 | |
| Updated: | Monday December 26, 2011 | |
| Applies to: | VB4-32, VB5, VB6 | |
| Developed with: | VB4-32, Windows 95 | |
| OS restrictions: | None | |
| Author: | VBnet - Randy Birch | |
| Related: | SHGetFileInfo: ListView Demo 1 - Obtaining the File Path SHGetFileInfo: ListView Demo 2 - Populating the ListView SHGetFileInfo: ListView Demo 3 - Adding Sorting Functionality SHGetFileInfo: ListView Demo 4 - Adding the Associated Icons  | 
   |
| Prerequisites | 
| SHGetFileInfo: ListView Demo 2 - Populating the ListView
          This method is intended for Visual Basic 5 or Visual Basic 6 where the Common Control library used is the MSComCtl 5 version (comctl32.ocx). Because the VB6-specific mscomctl.ocx (Common Controls 6) is a complete implementation of comctl32.dll and not reliant on the version of comctl32.dll installed, this routine may not work when applied to a listview created from the VB6-specific mscomctl.ocx. Enhanced Comctl32 functionality is only available to users with comctl32.dll version 4.70 or greater installed. This dll is typically installed with IE3.x or greater.  | 
   
| 
          | 
   
        This
         page adds a popup menu and the routines necessary to sort and change list views.When the demo is completed, the final app will retrieve the users selection and populate the listview with selected files from that folder, complete with associated icons, file name, file type, file size and created date. To the project form, add a menu as outlined in the illustration. Name
         the menu items as follows:  | 
   
| BAS Module Code | 
| There are no changes to the general declarations area of the project's bas module. | 
| 
          | 
   
| Form Code | 
| 
       
 | 
   
| Make the following additions to the form code: | 
| 
          | 
   
         Option Explicit In the form's general declarations, add:
Dim prevOrder As Integer
In the form code, make the following bolded changes: 
Private Sub Form_Load()
    Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
    
    With Combo1
        .AddItem "All Files and Folders (*.*)"
        .AddItem "Applications (*.exe)"
        .AddItem "Device Drivers (*.drv)"
        .AddItem "Documents (*.doc)"
        .AddItem "Dynamic Link Libraries (*.dll)"
        .AddItem "Rich Text Format Documents (*.rtf)"
        .AddItem "System Files (*.sys)"
        .AddItem "Visual Basic Modules (*.bas)"
        .AddItem "Visual Basic Forms (*.frm)"
        .AddItem "Visual Basic 3 Projects (*.mak)"
        .AddItem "Visual Basic 4 Projects (*.vbp)"
        .AddItem "Postscript Printer Font Metrics (*.pfm)"
        .AddItem "Text Files (*.txt)"
        .AddItem "True Type Fonts (*.ttf)"
        .AddItem "Windows Help Files (*.hlp)"
        .AddItem "Windows Shortcuts (*.lnk)"
        .ListIndex = 0
    End With
    With ListView1
      .SortKey = 0
    End With
      
    UpdateFrequency = 25
    prevOrder = 0
   
End Sub
Add the following new code to the form:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader)
    Dim currSortKey As Integer
    
    ListView1.SortKey = ColumnHeader.index - 1
    currSortKey = ListView1.SortKey
    
    ListView1.SortOrder = Abs(Not ListView1.SortOrder = 1)
    ListView1.Sorted = True
    
    mnuOrder(prevOrder).Checked = False
    
    mnuSortAZ.Checked = ListView1.SortOrder = 0
    mnuSortZA.Checked = mnuSortAZ.Checked = False
  
    If currSortKey > -1 Then
      mnuOrder(currSortKey).Checked = True
      prevOrder% = currSortKey
    End If
End Sub
Private Sub ListView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    If Button = 2 Then PopupMenu mnuOptions
End Sub
Private Sub mnuOrder_Click(index As Integer)
    mnuOrder(prevOrder).Checked = False
    mnuOrder(index).Checked = True
    prevOrder = index
    
    ListView1.SortKey = index
    ListView1.SortOrder = 0
    ListView1.Sorted = True
               
    mnuSortAZ.Checked = ListView1.SortOrder = 0
    mnuSortZA.Checked = mnuSortAZ.Checked = False
    
End Sub
Private Sub mnuSortAZ_Click()
    ListView1.SortOrder = 0
    ListView1.Sorted = True
    
    mnuSortAZ.Checked = ListView1.SortOrder = 0
    mnuSortZA.Checked = mnuSortAZ.Checked = False
End Sub
Private Sub mnuSortZA_Click()
    ListView1.SortOrder = 1
    ListView1.Sorted = True
    
    mnuSortAZ.Checked = ListView1.SortOrder = 0
    mnuSortZA.Checked = mnuSortAZ.Checked = False
  
End Sub
Private Sub mnuView_Click(index As Integer)
    mnuView(ListView1.View - 2).Checked = False
    mnuView(index).Checked = True
    
    ListView1.View = index + 2
    ListView1.Sorted = True
     
End Sub
       | 
   
| Comments | 
| Run the project, and click the Select Folder button.
         Browse to any folder, and hit OK. The folder selected and the file type from the combo box should be returned in the DisplayName label as a
         fully-qualified path and filespec. In addition, the listview should populate with all the files in the selected directory matching the
         selected file type. By right-clicking over the listview control, you can select from the popup menu. As well, the clicking the column headers will also sort the items. Note however that the numeric sorting of the file size is inaccurate; a ListView normally calls a special routine via callbacks to sort non-alpha items. To overcome this limitation, a callback must be used (VB5 only). This demo does not cover implementing the callback; see dd. Move to SHGetFileInfo: ListView Demo 4 - Adding the Associated Icons  | 
   
| 
          | 
   
  | 
      
| 
          | 
         |||||
  				
                     			
  | 
         |||||
| 
          | 
         |||||
| 
             
            	
            	Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved.  | 
         
          ![]()  |