GFFileList/Form1.frm

VERSION 5.00
Begin VB.Form Form1
   Caption         =   "Form1"
   ClientHeight    =   3015
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   4635
   LinkTopic       =   "Form1"
   ScaleHeight     =   3015
   ScaleWidth      =   4635
   StartUpPosition =   3 'Windows‑Standard
   Begin VB.FileListBox File1
      Enabled         =   0 'False
      Height          =   285
      Left            =   2400
      TabIndex        =   5
      Top             =   660
      Visible         =   0 'False
      Width           =   255
   End
   Begin VB.DirListBox GFDirectoryListDir
      Enabled         =   0 'False
      Height          =   315
      Left            =   2160
      TabIndex        =   4
      Top             =   660
      Visible         =   0 'False
      Width           =   195
   End
   Begin VB.CommandButton Command2
      Caption         =   "Overkill Test"
      Height          =   375
      Left            =   120
      TabIndex        =   2
      Top             =   600
      Width           =   1935
   End
   Begin VB.ListBox List1
      Height          =   1815
      Left            =   120
      TabIndex        =   3
      Top             =   1080
      Width           =   4395
   End
   Begin VB.CommandButton Command1
      Caption         =   "Get File Names"
      Height          =   375
      Left            =   120
      TabIndex        =   1
      Top             =   120
      Width           =   1935
   End
   Begin VB.TextBox Text1
      Height          =   285
      Left            =   2160
      TabIndex        =   0
      Top             =   180
      Width           =   2355
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'(c)2003, 2004 by Louis.
'
'Downloaded from www.louis‑coder.com.
'Add GFFileListcls to your project, you can use it like a VB FileListBox.
'Please do not use the GFDirectoryList code of this form, it is obsolete.
'Use Louis Coder's GFDirectoryList4 instead (www.louis‑coder.com).
'
'GFDirectoryList
Dim GFDirectoryListNumber As Integer
Dim GFDirectoryListArray() As String
Dim GFDirectoryListCancelFlag As Boolean

Private Sub Command1_Click()
    'on error resume next
    Dim X As New GFFileListcls
    Dim FileLoop As Integer
    'reset
    List1.Clear
    'begin
    X.Path = Text1.Text
    X.Pattern = "*.*"
    X.Refresh
    For FileLoop = 1 To X.ListCount
        List1.AddItem X.List(FileLoop ‑ 1)
    Next FileLoop
End Sub

Private Sub Command2_Click()
    'on error resume next 'search all sub directories, verify the results of VB‑ and this FileListBox are equal (except order)
    Dim X As New GFFileListcls
    Dim DirNumber As Integer
    Dim DirArray() As String
    Dim DirLoop As Integer
    Dim FileLoop As Integer
    Dim CompareLoop As Integer
    'preset
    Call GFDirectoryList_Create(Text1.Text, True, DirArray(), DirNumber)
    'begin
    For DirLoop = 1 To DirNumber
        File1.Path = DirArray(DirLoop)
        File1.Refresh
        X.Path = DirArray(DirLoop)
        X.Refresh
        If Not (File1.ListCount = X.ListCount) Then MsgBox "TOO BAD"
        For FileLoop = 1 To File1.ListCount
            For CompareLoop = 1 To X.ListCount
                If UCase$(File1.List(FileLoop ‑ 1)) = UCase$(X.List(CompareLoop ‑ 1)) Then GoTo Jump:
            Next CompareLoop
            MsgBox "TOO BAD (2)"
Jump:
        Next FileLoop
    Next DirLoop
    MsgBox "YEAH, RESULT OF VB FILE LIST BOX IS THE SAME"
End Sub

'***GFDIRECTORYLIST***

Private Function GFDirectoryList_Create(ByVal ScanStartDir As StringByVal AddScanStartDirFlag As BooleanByRef GFDirectoryListArrayPassed() As StringByRef GFDirectoryListNumberPassed As Integer) As Boolean
    On Error GoTo Error: 'v2.0 (aborting possible); returns True if successful, False if error (i.e. ScanStartDir is invalid)
    Dim Temp As Long
    '
    'NOTE: this function initializes passed array with the full name of all
    'sub directories of ScanStartDir (format: x:\x\).
    '
    'reset
    GFDirectoryListNumber = 0 'reset
    ReDim GFDirectoryListArray(1 To 1) As String 'reset
    GFDirectoryListCancelFlag = False 'reset
    'scan beginning in ScanStartDir
    If AddScanStartDirFlag = True Then
        Call GFDirectoryList_AddItem(ScanStartDir)
    End If
    GFDirectoryListDir.Path = ScanStartDir
    GFDirectoryListDir.Refresh
    Call GFDirectoryList_Scan("")
    If GFDirectoryListCancelFlag = True Then GoTo Error:
    'transfer scan result
    GFDirectoryListNumberPassed = GFDirectoryListNumber
    If Not (GFDirectoryListNumberPassed = 0) Then 'verify
        ReDim GFDirectoryListArrayPassed(1 To GFDirectoryListNumberPassed) As String
    Else
        ReDim GFDirectoryListArrayPassed(1 To 1) As String
    End If
    For Temp = 1 To GFDirectoryListNumberPassed
        GFDirectoryListArrayPassed(Temp) = GFDirectoryListArray(Temp)
    Next Temp
    GFDirectoryList_Create = True 'ok
    Exit Function
Error:
    GFDirectoryList_Create = False 'error
    Exit Function
End Function

Private Sub GFDirectoryList_Scan(ByRef ScanDirOld As String)
    On Error GoTo Error: 'important (avoid endless loop)
    Dim ScanDirNumberTotal As Integer
    Dim ScanParentDir As String
    ScanDirNumberTotal = GFDirectoryListDir.ListCount
    Do While ScanDirNumberTotal > 0
        ScanParentDir = GFDirectoryListDir.Path
        If GFDirectoryListDir.ListCount > 0 Then
            GFDirectoryListDir.Path = GFDirectoryListDir.List(ScanDirNumberTotal ‑ 1) 'jump to Error: if i.e. network drive was disconnected
            GFDirectoryListDir.Refresh
            Call GFDirectoryList_AddItem(GFDirectoryListDir.Path)
            Call GFDirectoryList_Scan(ScanParentDir)
            If GFDirectoryListCancelFlag = True Then Exit Sub 'recursive call used, leave all subs
        End If
        ScanDirNumberTotal = ScanDirNumberTotal ‑ 1
    Loop
    If Not (ScanDirOld = "") Then
        GFDirectoryListDir.Path = ScanDirOld
        GFDirectoryListDir.Refresh 'DoEvents was removed
        Call GFDirectoryList_DoEvents(GFDirectoryListCancelFlag)
    End If
    Exit Sub
Error:
    'do nothing
    Exit Sub
End Sub

Private Sub GFDirectoryList_AddItem(ByVal Directory As String)
    'on error resume next
    If Not (GFDirectoryListNumber = 32767) Then 'verify
        GFDirectoryListNumber = GFDirectoryListNumber + 1
    Else
        Exit Sub 'error
    End If
    If Not (Right$(Directory, 1) = "\") Then Directory = Directory + "\" 'verify
    If ((GFDirectoryListNumber ‑ 1) Mod 128) = 0 Then 'resize array in steps to save CPU time
        ReDim Preserve GFDirectoryListArray(1 To GFDirectoryListNumber + 127) As String
    End If
    GFDirectoryListArray(GFDirectoryListNumber) = Directory
    Exit Sub
End Sub

Private Sub GFDirectoryList_DoEvents(ByRef CancelFlag As Boolean)
    'on error resume next
    '***DEBUG SPECIFIC***
    'do nothing
    '***END OF DEBUG SPECIFIC***
End Sub

'***END OF GFDIRECTORYLIST***


[END OF FILE]