THE FILES STATEMENT IN ACTION - PROGRAM FILE DIALOG

Home

API File Search
Filedialogs
The FILES statement
The FILES statement in action
Open Source Editor for WinXP
Spotlight on John Fisher
Using Winsock
Winsock API Reference

This sample shows how to use the FILES statement to fill listboxes and comboboxes to simulate a Windows filedialog.
The advantage to writing your own dialog of this type is that it can remain open, and it can contain other controls. For instance, it might be used to preview wav files by playing a wav when one is selected from the list. You might include a graphicbox to create a bitmap previewer. The uses are many for this type of window.

'some code by Ryan Jeffords, 1997
NoMainWin
 Dim dir$(10,10)
     Dim files$(300)
     Dim directory$(300)
     Dim Drive$(300)
     Dim type$(5)
     qu$ = Chr$(34)
     view = 0
 pathname$ = Mid$(DefaultDir$,3,Len(DefaultDir$))
     unit$ = Left$(DefaultDir$,2)
     fileext$ = "*.txt"
 type$(1) = "Text Files (*.TXT)"
     type$(2) = "Code Files (*.BAS)"
     type$(3) = "Bitmap Files (*.BMP)"
     type$(4) = "All Files (*.*)"
 GoSub [scanfiles]
 '** Set Window Attributes
     UpperLeftX = Int((DisplayWidth- 447)/2)
     UpperLeftY = Int((DisplayHeight- 246)/2)
     WindowWidth = 447
     WindowHeight = 246
 '** Add Window Controls
     Textbox #dirbox.filetext, 5, 20,170,25
     Listbox #dirbox.filebox, files$(, [db.InputLoop],5,55,170,105
     Combobox #dirbox.filetype, type$(, [db.filetype],5,185,170,165
     Listbox #dirbox.dirbox, directory$(, [db.InputLoop],185,20,175,138
     Combobox #dirbox.drivebox, Drive$(, [db.drivetype],185,185,175,80
     Button #dirbox.Button12, "Ok", [db.ok] , UL,365,30,70,24
     Button #dirbox.Button13, "Cancel", [db.CloseWindow],UL,364,56,70,24
     statictext #dirbox.1, "File Types:",5,162,170,20
     statictext #dirbox.2, "Drives:",185,162,170,20
     statictext #dirbox.3, "File Names:",5,1,170,20
     statictext #dirbox.4, "Folders:",185,1,170,20
 '** Display window
     Open "File Preview Dialog" For dialog As #dirbox
     Print #dirbox, "TRAPCLOSE [db.CloseWindow]"
 Print #dirbox, "font MS_Sans_Serif 0 16"; '** Set the font
     Print #dirbox.filebox, "singleclickselect [db.choosefile]"
     Print #dirbox.dirbox, "singleclickselect [db.choosedir]"
[db.AfterLoad]
     Print #dirbox.drivebox, "select "; unit$
     Print #dirbox.filetype, "select "; type$(1)
     GoSub [redisplayfiles]
     [db.InputLoop]
     wait
     [db.CloseWindow]
     Close #dirbox : End
     [db.Subroutines]
     [redisplayfiles]
     Print #dirbox.dirbox, "reload"
     Print #dirbox.filebox, "reload"
     Return
[scanfiles]
     index = 0
     loadname$ = unit$ + pathname$
     Files loadname$, fileext$, dir$(
     qtyFiles = Val(dir$(0, 0))
     qtySubDirs = Val(dir$(0, 1))
     ReDim files$(300)
     For x = 1 TO qtyFiles
     dir$(x,1) = Right$(dir$(x, 1), 9)
     files$(x) = Left$(dir$(x, 0),13)
     Next x
     While Word$(Drives$, index + 1) <> ""
     Drive$(index) = Word$(Drives$, index + 1)
     index = index + 1
     Wend
     ReDim directory$(300)
     directory$(0) = ". ."
     For x = qtyFiles+1 TO qtyFiles + qtySubDirs
     directory$(x) = " " + dir$(x, 1)
     Next x
     If qtyFiles > 2 Then Sort files$(, 1, qtyFiles
     Return
[truncatename]
     For z = Len(pathname$) TO 1 step -1
     If Mid$(pathname$,z,1) = "\" Then pathname$ = Left$(pathname$, z-1): z = 0
     Next z
     If Instr(pathname$,"\") = 0 Then pathname$ = "\"
     Return
     [db.choosefile]
     Print #dirbox.filebox ,"selection? selection$"
     Print #dirbox.filetext, selection$
     GoSub [redisplayfiles]
     wait
     [db.filetype]
     Print #dirbox.filetype ,"selection? fileext$"
     z = Instr(fileext$, "(")
     fileext$ = Mid$(fileext$, z+1, Len(fileext$)-z-1)
     GoSub [scanfiles]
     GoSub [redisplayfiles]
     wait
     [db.choosedir]
     Print #dirbox.dirbox ,"selection? newdir$"
     If newdir$ <> ". ." AND Len(pathname$) > 2 Then
     pathname$ = pathname$ + "\" + newdir$
     Else
     pathname$ = pathname$ + newdir$
     End If
     If newdir$ = ". ." Then GoSub [truncatename]
     GoSub [scanfiles]
     GoSub [redisplayfiles]
     wait
     [db.drivetype]
     Print #dirbox.drivebox ,"selection? newunit$"
     unit$ = newunit$ : pathname$ ="\"
     GoSub [scanfiles]
     GoSub [redisplayfiles]
     wait
[db.ok]
     Print #dirbox.filetext, "!Contents? TheName$";
     Notice "Dir Info" +Chr$(13)+"File Name Selected :";TheName$+Chr$(13)+"Directory: "+loadname$
     wait

Home

API File Search
Filedialogs
The FILES statement
The FILES statement in action
Open Source Editor for WinXP
Spotlight on John Fisher
Using Winsock
Winsock API Reference