|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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. |