Code: Select all
#include "FWCE.ch"
function Main()
MsgInfo( cGetFile( "*.*", "\" ) )
return nil
static function cGetFile( cMask, cPath )
local oDlg, oBrw, oBtn, aItems, cFileName := ""
DEFAULT cMask := "*.*", cPath := "\"
aItems = GetItems( cMask, @cPath )
DEFINE DIALOG oDlg TITLE "Please select a file" ;
SIZE 220, 210
@ 0.4, 0.7 LISTBOX oBrw ;
FIELDS aItems[ oBrw:nAt, 1 ], aItems[ oBrw:nAt, 2 ], aItems[ oBrw:nAt, 3 ],;
aItems[ oBrw:nAt, 4 ] ;
HEADERS "Name", "T", "Size", "Date" ;
COLSIZES 100, 15, 70, 40 ;
SIZE 100, 82 ;
ON DBLCLICK SelFile( oBrw, cMask, @cPath, @cFileName, oDlg )
oBrw:SetArray( aItems )
oBrw:aJustify = { .f., .f., .t., .f. }
oBrw:bKeyChar = { | nKey | If( nKey == 13,;
( SelFile( oBrw, cMask, @cPath, @cFileName, oDlg ), oBrw:SetFocus() ),) }
@ 5, 3 BUTTON oBtn PROMPT "Ok" ACTION SelFile( oBrw, cMask, @cPath, @cFileName, oDlg )
@ 5, 10 BUTTON "Cancel" ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTERED
return cFileName
static function CheckItem( oBrw, cMask, cPath )
local cItem := Eval( oBrw:bLine )[ 1 ]
local cType := Eval( oBrw:bLine )[ 2 ]
local aItems
if cType == "D"
if cItem == ".."
cPath = SubStr( cPath, 1, RAt( "\", cPath ) - 1 )
cPath = SubStr( cPath, 1, RAt( "\", cPath ) - 1 )
aItems = GetItems( cMask, cPath += "\" )
else
aItems = GetItems( cMask, cPath += cItem + "\" )
endif
oBrw:SetArray( aItems )
oBrw:nAt = 1
oBrw:bLine = { || { aItems[ oBrw:nAt, 1 ], aItems[ oBrw:nAt, 2 ],;
aItems[ oBrw:nAt, 3 ], aItems[ oBrw:nAt, 4 ] } }
oBrw:GoTop()
oBrw:Refresh()
endif
return nil
static function GetItems( cMask, cPath )
local aInfo := Directory( cPath + cMask, "D" )
local aItems := {}, n
if Len( cPath ) > 1
AAdd( aItems, { "..", "D", "", "" } )
endif
for n = 1 to Len( aInfo )
if "D" $ aInfo[ n ][ 5 ]
AAdd( aItems, { aInfo[ n ][ 1 ], "D", aInfo[ n ][ 2 ],;
DToC( aInfo[ n ][ 3 ] ) } )
endif
next
for n = 1 to Len( aInfo )
if ! "D" $ aInfo[ n ][ 5 ]
AAdd( aItems, { aInfo[ n ][ 1 ], "F", Str( aInfo[ n ][ 2 ] ),;
DToC( aInfo[ n ][ 3 ] ) } )
endif
next
return aItems
static function SelFile( oBrw, cMask, cPath, cFileName, oDlg )
if Eval( oBrw:bLine )[ 2 ] == "F"
cFileName = cPath + Eval( oBrw:bLine )[ 1 ]
oDlg:End()
else
CheckItem( oBrw, cMask, @cPath )
endif
return nil